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

时间:2019-06-24 15:12:19

标签: android android-intent android-activity intentfilter android-implicit-intent

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

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

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

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

1 个答案:

答案 0 :(得分:0)

  

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

如果是图书馆:

  • ...是AAR
  • ...具有一个AndroidManifest.xml文件,该文件...
  • ...具有一个<activity>的{​​{1}}与您的隐式<intent-filter>匹配

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

  • 如果用户在上一个Intent调用中为此Intent结构设置了默认设置,则该默认活动将是已开始的活动
  • 否则,用户将看到一个选择器
  

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

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

  

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

如果用户尚未设置默认活动,则不能。由用户决定哪个应用程序的活动应处理该隐式startActivity()

换一种说法:恶意软件作者会单方面劫持隐式Intent并将其全部路由到恶意软件的能力。