我的一个应用中有一个 Activity,它有一个 Intent 过滤器,但仍被标记为私有,即android:exported=false
:
<activity android:exported="false" android:name=".facebook.PostToFacebookActivity" android:icon="@drawable/facebook_icon" android:label="@string/facebook_built_in">
<intent-filter>
<action android:name="android.intent.action.SEND" />
<category android:name="android.intent.category.DEFAULT" />
<data android:mimeType="text/plain" />
</intent-filter>
</activity>
(Activity 仅供内部使用;我的应用程序的一部分允许用户从可以在某处发送文本的所有 Activity 列表中进行选择,这使我可以轻松地将几个应用程序内部选项添加到整个列表中。)
但是,当我queryIntentActivites()
从不同的应用程序使用时,我的“私人”活动仍然返回:
// Returned list includes the above activity, even though it's declared private.
List<ResolveInfo> infoList = pm.queryIntentActivities(
myIntent,
PackageManager.MATCH_DEFAULT_ONLY |
PackageManager.GET_INTENT_FILTERS
);
基本安全似乎工作正常,就好像我尝试从其他应用程序启动 Activity 一样,我得到一个安全异常。但是,为 Intent 请求活动会为您提供一个列表,其中包括您不允许开始的活动,这似乎很奇怪。
我原以为如果将 Activity 设置为不导出,它甚至不会出现在queryIntentActivities()
结果中。无论如何,这就是我想要的行为。是否有一个标志我可以用来说“不要向我显示私人活动”,或者一种过滤结果以摆脱我不允许开始的活动的简单方法?