java - 有没有办法明确告诉 Android 系统将我的 Intent 解析为当前 Intent 操作的默认应用程序/Activity ?

标签 java android android-intent

我需要从我的 Android 应用程序打开 Web 链接,但不会提示用户选择器对话框(也称为“消歧对话框”),只需使用默认浏览器来处理此 Intent 。

当我使用此代码时:

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

根据官方文档中对 Intent.resolveActivity 方法的描述,不能保证解析 Intent 只会产生一个 Activity:

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

如何避免选择器对话框并仅传递到“最佳” Activity 或此操作类型的默认 Activity ?

最佳答案

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

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

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

关于java - 有没有办法明确告诉 Android 系统将我的 Intent 解析为当前 Intent 操作的默认应用程序/Activity ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60253180/

相关文章:

java - 如何知道SCM中哪些Maven模块被更改?

java - On Void 返回类型

java - 使用 Java 管理 Gmail。按 "sent to"过滤收件箱

android - Jackson + Gson + Retrofit 预期为 BEGIN_OBJECT 但为 BEGIN_ARRAY

android - 实现 Parcelable 的正确方法

java - 我正在尝试为金字塔编写一个类定义。但由于某种原因它想要运行。我是初学者,非常迷失

android - Android-Jelly Bean-YouTube仅播放一次视频

android - 如何更改操作栏 NAVIGATION_MODE_LIST 中的 'little triangle color'

android - 如何从菜单切换到新 Activity ?

android - java.lang.RuntimeException : Handler (android. os.Handler) 向死线程上的 Handler 发送消息