1

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

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

可以说很少有应用程序包含相同的库。如果我触发一个隐式意图,用户会看到“选择一个应用程序来处理这个意图”吗?

还是因为所有应用程序都包含相同的库,它才会打开?

4

1 回答 1

0

如果我触发一个隐式意图,用户会看到“选择一个应用程序来处理这个意图”吗?

如果图书馆:

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

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

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

还是因为所有应用程序都包含相同的库,它才会打开?

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

我如何使用隐式意图但避免“选择一个应用程序来处理这个意图”屏幕?

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

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

于 2019-06-24T15:17:02.753 回答