【问题标题】:Is there a way to explicitly say to android system resolve my intent to default app/activity for current intent action?有没有办法明确告诉android系统将我的意图解析为当前意图操作的默认应用程序/活动?
【发布时间】:2020-02-16 21:02:41
【问题描述】:

我需要从我的 android 应用程序打开网络链接,但没有提示用户选择器对话框(也称为“消歧对话框”),只需使用默认浏览器来处理此意图。

当我使用这段代码时:

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

根据官方文档中对 Intent.resolveActivity 方法的描述,不保证解析意图只会导致一个活动:

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

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

【问题讨论】:

  • 根据文档,这就是 Android 的工作方式,因此您无法避免这种行为

标签: java android android-intent


【解决方案1】:

您可以通过调用PackageManager.queryIntentActivities() 自己解决Intent

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

如果它返回超过 1 个结果,您可以执行其他操作。例如,由于结果从“最佳”返回到“最差”(无论这意味着什么),您可以直接启动第一个结果。或者您可以扫描结果列表以查找您的代码认为合适的内容(即:匹配浏览器名称列表)。

【讨论】:

  • 嘿,谢谢你的回答 :) 是的,我已经考虑过这个解决方案。我还考虑过通过相同的 PackageManager API 构建我自己的对话框选择器,但是由于本机对话框中的“始终”和“仅一次”等设置难以实现,甚至是不可能的,我认为在我的情况下最好的解决方案就是你提供的对我来说。
猜你喜欢
  • 1970-01-01
  • 2013-04-25
  • 2018-07-08
  • 1970-01-01
  • 2018-06-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多