我的某个应用中有一个活动,它有一个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
);
基本的安全性似乎工作正常,就好像我尝试从其他应用程序启动Activity,我得到一个安全异常。但似乎奇怪的是,要求一个意图的活动会给你一个列表,其中包括你不允许开始的活动。
我原以为如果某个活动设置为不导出,它甚至不会出现在queryIntentActivities()
结果中。无论如何,这就是我想要的行为。是否有一个标志我可以用来说“不要向我展示私人活动”,或者是一种简单的方法来过滤结果以摆脱我不允许开始的活动?
答案 0 :(得分:7)
我原以为如果将Activity设置为不导出,它甚至不会出现在queryIntentActivities()结果中。
这是方式过于合乎逻辑。 : - )
是否有一面旗帜我可以用来说“不要告诉我私人活动”
当然没有任何记录。
还是一种简单的方法来过滤结果以摆脱我不允许开始的活动?
如果有ResolveInfo
,则activityInfo.exported
boolean
对于未导出的活动应为false。您可以遍历queryIntentActivities()
结果并清除未导出的结果。