Join FlipAndroid.COM Telegram Group: https://t.me/joinchat/F_aqThGkhwcLzmI49vKAiw


¿Cómo excluir una aplicación específica de ACTION_VIEW?

Estoy intentando cargar una URL de twitter en el navegador.

En mi teléfono, ya he instalado la aplicación de Twitter también. Estoy intentando abrir la URL usando la intención de ACTION_VIEW . Pero lo que sucede es, cuando llamo intención, android mostrará el diálogo predeterminado del selector, que contiene la aplicación de Twitter también (si está instalado en el dispositivo). Quiero abrir la URL sólo con navegadores. Quiero excluir la aplicación de Twitter del diálogo . Quiero que todos los navegadores disponibles en el dispositivo aparezcan en el diálogo, no aplicaciones nativas como twitter, facebook, etc.

¿Es posible o no? Si es posible, ¿podría alguien ayudarme a lograrlo? También adjunto mi código y una captura de pantalla junto con esta pregunta para mayor claridad.

 String url = "https://twitter.com"; MimeTypeMap map = MimeTypeMap.getSingleton(); String type = map.getMimeTypeFromExtension(url); Intent i = new Intent(Intent.ACTION_VIEW); i.setType(type); i.setData(Uri.parse(url)); startActivity(i); 

Introduzca aquí la descripción de la imagen

2 Solutions collect form web for “¿Cómo excluir una aplicación específica de ACTION_VIEW?”

Necesitaba hacer algo similar y encontré esta respuesta útil. Lo he modificado para que sea una solución completa:

 public static void openFileWithInstalledAppExceptCurrentApp(File file, final Activity activity) { Intent intent = new Intent(); intent.setAction(android.content.Intent.ACTION_VIEW); MimeTypeMap mime = MimeTypeMap.getSingleton(); String ext = file.getName().substring(file.getName().indexOf(".")+1); String type = mime.getMimeTypeFromExtension(ext); intent.setDataAndType(Uri.fromFile(file),type); PackageManager packageManager = activity.getPackageManager(); List<ResolveInfo> activities = packageManager.queryIntentActivities(intent, 0); String packageNameToHide = "com.test.app"; ArrayList<Intent> targetIntents = new ArrayList<Intent>(); for (ResolveInfo currentInfo : activities) { String packageName = currentInfo.activityInfo.packageName; if (!packageNameToHide.equals(packageName)) { Intent targetIntent = new Intent(android.content.Intent.ACTION_VIEW); targetIntent.setDataAndType(Uri.fromFile(file),type); targetIntent.setPackage(packageName); targetIntents.add(targetIntent); } } if(targetIntents.size() > 0) { Intent chooserIntent = Intent.createChooser(targetIntents.remove(0), "Open file with"); chooserIntent.putExtra(Intent.EXTRA_INITIAL_INTENTS, targetIntents.toArray(new Parcelable[] {})); activity.startActivity(chooserIntent); } else { Toast.makeText(this, "No app found", Toast.LENGTH_SHORT).show(); } } 

Sólo tiene que establecer el paquete de destino a la intención:

 String url = "https://twitter.com"; MimeTypeMap map = MimeTypeMap.getSingleton(); String type = map.getMimeTypeFromExtension(url); Intent i = new Intent(Intent.ACTION_VIEW); i.setType(type); i.setData(Uri.parse(url)); ComponentName comp = new ComponentName("com.android.browser", "com.android.browser.BrowserActivity"); i.setComponent(comp); i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 

Sin embargo, los usuarios mi ser molestado si tienen algún navegador personalizado instalado y desea utilizar esto como predeterminado.

Puede intentar detectar el navegador predeterminado con:

 Intent i = new Intent(Intent.ACTION_VIEW, Uri.parse("http://example.com")); List<ResolveInfo> list = context.getPackageManager() .queryIntentActivities(i, 0); // walk through list and select your most favorite browser 
FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.