我的一个应用程序中有一个"活动",该应用程序具有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>
("活动"仅供内部使用;我的应用程序的一部分允许用户从所有可以发送文本的活动列表中进行选择,这使我可以轻松地在整个列表中添加几个应用程序内部选项。(
然而,当我从不同的应用程序使用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
);
基本的安全似乎工作得很好,就好像我试图从另一个应用程序启动"活动",我得到了一个安全异常。但奇怪的是,询问"意向活动"会给你一个列表,其中包括你不允许开始的活动。
我本以为,如果将"活动"设置为不导出,它甚至不会出现在queryIntentActivities()
结果中。无论如何,这就是我想要的行为。有没有一个标志可以用来表示"不要向我显示私人活动",或者一种简单的过滤结果的方法来清除我不允许启动的活动?
我本以为,如果将"活动"设置为不导出,它甚至不会出现在queryIntentActivities((结果中。
这是方式太合乎逻辑了。:-(
有没有一面旗帜我可以用来说"不要给我看私人活动">
当然没有任何记录。
还是一种简单的过滤结果的方法来清除我不被允许启动的活动?
给定ResolveInfo
,对于未导出的活动,activityInfo.exported
boolean
应该为false。您可以循环查看queryIntentActivities()
结果,并剔除未导出的结果。