如何从ACTION_VIEW意图中排除特定的应用程序?

我正在尝试在浏览器中加载一个twitter URL。

在我的手机中,我也已经安装了twitter应用程序。 我正在尝试打开使用ACTION_VIEW意图的URL。 但是会发生什么呢,当我打电话intent时,android会显示默认的select器对话框,其中也包含twitter应用程序(如果它安装在设备上)。 我只想使用浏览器打开url。 我想从对话框中排除Twitter应用程序 。 我希望设备中的所有可用的浏览器都显示在对话框中,而不是像twitter,facebook等原生应用程序。

这有可能吗? 如果可能的话,任何人都可以帮助我实现它。 为了清楚起见,我还附上我的代码和屏幕截图。

 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); 

在这里输入图像说明

Solutions Collecting From Web of "如何从ACTION_VIEW意图中排除特定的应用程序?"

我需要做一个类似的事情,发现这个答案有帮助。 我已经修改它,以便它是一个完整的解决scheme:

 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(); } } 

你只需要设置目标包的意图:

 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); 

但是,如果用户安装了一些自定义浏览器,并希望将其用作默认浏览器,则会对用户感到不安。

您可以尝试使用以下方法检测默认浏览器:

 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