有没有一种方法可以明确地对android系统说,将我的意图解析为当前意图操作的默认应用程序/活动



我需要从我的android应用程序打开web链接,但不提示用户选择对话框(也称为"消歧对话框"(,只需使用默认浏览器即可处理此意图。

当我使用这个代码:

Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
startActivity(intent);

根据官方文件中intent.resolveActivity方法的描述,不能保证解决意图只会导致一个活动:

如果发现多个活动满足意图,则将使用优先级最高的活动。如果有多个具有相同优先级的活动,系统将根据用户偏好选择最佳活动,或者解析为允许用户选择活动并从中转发的系统类。

如何避免选择器对话框,而只传递给"最佳"活动或此操作类型的默认活动?

您可以通过调用PackageManager.queryIntentActivities()自行解析Intent

如果这只返回1个结果,那么您只需调用startActivity(),就可以确保Android不会显示选择器对话框。

如果返回的结果超过1个,则可以执行其他操作。例如,由于结果从"最佳"返回到"最差"(不管这意味着什么(,所以您可以显式地启动第一个结果。或者,你可以扫描结果列表,寻找你的代码认为合适的东西(即:与浏览器名称列表匹配(。

最新更新