我在我的应用程序有一个意图过滤器中的一个已经的活动是私人活动,但仍被标记为私有,即android:exported=false
:queryIntentActivities()包括结果
<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()
结果中。无论如何,这就是我想要的行为。有没有可以用来表示“不要显示我的私人活动”的标志,还是一种过滤结果的简单方法,以摆脱我不允许开始的活动?
我完全不知道为什么我没有把这个标记为两年前的答案!补救。 –
@MattGibson有趣的是,没有看到这篇文章,我也写了一个活动,通过这个“作弊”从我的应用程序发布到FB。和你一样遇到同样的问题。其他应用程序正在寻找我的你找到解决方案吗? – theblitz
@theblitz Nope;最终,我从不需要从试图使用我的第三方应用程序的角度来解决这个问题,所以我没有调查。我可能会问一个新的SO问题,如果你还没有这样做... –