queryIntentActivities()包括结果中的私有活动

Mat*_*son 6 android android-intent android-activity

我在我的一个具有Intent过滤器的应用程序中有一个Activity,但仍然标记为私有,即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>
Run Code Online (Sandbox Code Playgroud)

(该活动仅供内部使用;我的应用程序的一部分允许用户从可以在某处发送文本的所有活动的列表中进行选择,这使我可以轻松地将几个应用程序内部选项添加到整个列表中.)

但是,当我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
);
Run Code Online (Sandbox Code Playgroud)

基本安全性似乎工作正常,就好像我尝试从其他应用程序启动Activity,我得到一个安全异常.但似乎奇怪的是,要求为意图活动会给你一个包含你不允许开始的活动的列表.

我原以为如果一个Activity被设置为不导出,它甚至不会出现在queryIntentActivities()结果中.无论如何,这就是我想要的行为.是否有一个标志我可以用来说"不要向我展示私人活动",或者是一种简单的方法来过滤结果以摆脱我不允许开始的活动?

Com*_*are 8

我原以为如果一个Activity被设置为不导出,它甚至不会出现在queryIntentActivities()结果中.

这是太合乎逻辑的.:-)

有没有一面旗帜可以用来说"不要告诉我私人活动"

当然没有任何记录.

或者一种简单的方法来过滤结果以摆脱我不允许开始的活动?

给定a ResolveInfo,activityInfo.exported boolean对于非出口活动应该是假的.您可以遍历queryIntentActivities()结果并清除未导出的结果.