导出的活动=活动选择器中列出的false



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

活动是用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添加一个意向过滤器,但我的问题是:为什么当文档读取时,其他应用程序的活动会出现

活动是否可以由其他应用程序的组件启动

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

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

为什么当文档读取。。。

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

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

最新更新