我如何使用隐式意图但避免 "select an app to handle this intent" 屏幕?

How can i use implicit intent but avoid "select an app to handle this intent" screen?

在我的代码中,我想触发一个隐含的意图来打开另一个 android 库 activity。

Intent i = new Intent("Shared library", Uri.parse("https://www.google.com/"));
startActivity(i);

假设很少有应用程序包含相同的库。如果我触发隐式意图,用户会看到 "select an app to handle this intent"?

或者因为所有应用程序都包含相同的库,它只会打开?

If I trigger an implicit intent will the user see the "select an app to handle this intent"?

如果图书馆:

  • ...是 AAR
  • ...有一个 AndroidManifest.xml 文件,其中...
  • ...有一个 <activity> 和一个 <intent-filter> 匹配你的隐式 Intent

然后,任何包含该库且未通过其自己的清单阻止 <activity> 的应用程序都将成为响应该隐式 Intent 的候选者。如果这些应用程序中有 2 个以上,则会发生正常 Android 隐式 Intent 解析:

  • 如果用户在之前的 startActivity() 调用中为此 Intent 结构设置了默认值,则默认值 activity 将是启动的那个
  • 否则,用户将看到一个选择器

Or because all the apps contain the same library it will just open?

否,因为Android不知道用户想要哪个应用程序。

How can i use implicit intent but avoid “select an app to handle this intent” screen?

如果用户没有设置默认 activity,则不能。由用户决定哪个应用程序的 activity 应该处理隐式 Intent.

换句话说:恶意软件作者 喜欢 单方面劫持隐式 Intents 并强制它们全部路由到恶意软件的能力。