5

我有两个类似的应用程序(一个免费,一个付费)。

活动定义为exported="false"

    <activity
        android:name=".MyActivity"
        android:exported="false"
        android:noHistory="true" >
        <intent-filter>
            <action android:name="android.intent.action.VIEW" />
            <category android:name="android.intent.category.DEFAULT" />
            <data android:mimeType="vnd.android.cursor.item/vnd.mine" />
        </intent-filter>
    </activity>

当我startActivity从免费应用程序以适当的隐式意图调用时,会出现活动选择器。

我不明白为什么会出现付费应用程序的活动,因为它是exported="false"

我想我可以添加一个基于 URL 的意图过滤器,但我的问题是:为什么在文档读取时出现来自其他应用程序的活动

Activity是否可以被其他应用程序的组件启动

4

1 回答 1

5

我不明白为什么会出现付费应用程序的活动,因为它是exported="false"

因为你有一个匹配的<intent-filter>. 由于您不需要<intent-filter>非导出的活动,因此只需将其删除并Intent在启动此活动时使用显式。

为什么在文档读取时出现来自其他应用程序的活动...

我有同样的问题,并被告知这是预期的行为,并且该错误在我们的应用程序中,因为有一个无用的<intent-filter>. 引用 Dianne Hackborn 的话:

我通常会认为这是应用程序中的一个错误——如果你有一个不允许其他应用程序启动的活动,你为什么要发布一个他们将匹配以尝试启动的意图过滤器?活动的安全性(无论是未导出还是需要许可)不是意图匹配的一部分。...这种情况(发布与其他应用程序将使用的意图相匹配的活动,但随后将其限制为不能被其他应用程序启动)如果没有彻底破坏,则无用。

于 2012-12-15T14:04:34.440 回答