【问题标题】:Activity exported=false listed in activity chooser活动选择器中列出的活动导出 = false
【发布时间】:2012-12-15 13:42:38
【问题描述】:

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

一个活动是用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是否可以被其他应用的组件启动

【问题讨论】:

    标签: android android-intent android-activity android-manifest android-implicit-intent


    【解决方案1】:

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

    因为您有匹配的&lt;intent-filter&gt;。由于非导出活动不需要&lt;intent-filter&gt;,因此只需将其删除并在启动此活动时使用显式Intent

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

    I had the same question 并被告知这是预期的行为,并且我们的应用程序中的错误是因为有一个无用的&lt;intent-filter&gt;。引用 Dianne Hackborn:

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

    【讨论】:

    • 你再一次给出了一个很好的答案,尽管我对此并不满意。我可以回复这位亲爱的 Dianne Hackborn:我希望库项目中的代码是通用的,它定义了一个 AbstractActivity ;免费应用程序定义和活动.MyActivity,付费活动.MyProActivty,两者都具有相同的意图过滤器。当无法完成继承时,我通常会考虑框架中的错误。
    • 解决方法:在抽象类中有一个返回类或显式意图的方法。 (在我的特殊情况下,我真的不想这样做)
    • @rds:“我希望库项目中的代码是通用的”——这并不是&lt;intent-filter&gt; 的真正作用。它可以以这种方式与导出的活动一起使用,但这不是它的最初目的。它应该是向操作系统和第三方宣传您愿意让他们使用的功能。
    • 你能不能接受一个小小的聊天会话,这样我可以更好地征求你的意见
    • @rds:因为我向订阅者提供办公时间聊天,所以我尽量避免私人 SO 聊天。我为我的限制性政策道歉。顺便说一句,另一种可能的解决方法是为您添加一个私有类别到您的&lt;intent-filter&gt; 并在Intent 中使用它(而不是DEFAULT)。使用不同的 provs.free 类别,您应该能够避免选择器。不过,这并不妨碍其他人使用同一类别创建自己的活动,这是&lt;intent-filter&gt;-as-public-API 模型的一部分。
    猜你喜欢
    • 2021-08-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-16
    • 2014-01-28
    • 2021-08-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多