4

我有两个类似的应用程序(一个免费,一个付费)。活动导出= 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"

我想我可以根据网址添加一个意图过滤器,但我的问题是:为什么在做活动其他应用程序出现在文档读取

无论活性可以通过其他应用程序的组件推出

回答

5

我不知道下坚持为什么从付费应用程序的活动出现,因为它是出口=“假”

因为你有一个匹配<intent-filter>。由于您不需要将<intent-filter>用于非导出活动,因此只需将其删除并在开始此活动时使用明确的Intent即可。

当文档读取为什么从其他应用程序的活动出现...

I had the same question,被告知,这是预期的行为,该bug是在我们的应用程序对具有无用<intent-filter>。引述戴安娜Hackborn:

我会普遍认为这在应用程序中的错误 - 如果你有,你是不是允许其他应用程序推出的活动,为什么赫克你发布的意图过滤器,他们将匹配尝试启动?活动的安全性(不是导出或需要许可)不是意图匹配的一部分。 ...这种情况(发布与其他应用程序将使用的意图相匹配的活动,但将其限制为不可由其他应用程序启动)并不是有用的,如果不彻底破坏的话。

+0

再次给出一个很好的答案,尽管我对此并不满意。我可以回复这位亲爱的Dianne Hackborn:我希望库项目中的代码是通用的,它定义了一个'AbstractActivity';免费的应用程序定义和活动“.MyActivity”,支付活动“.MyProActivty”,都具有相同的意图过滤器。我通常会在继承无法完成时考虑框架中的错误。 – rds

+0

解决方法:在抽象类中有一个返回类或显式意图的方法。 (在我的情况下,我真的不想这样做) – rds

+0

@rds:“我希望库项目中的代码是通用的” - 这不是真正的的作用。 *可以*这样使用,与出口活动一起使用,但这不是它的最初目的。它应该是向操作系统和第三方宣传您愿意让它们使用的功能的广告。 – CommonsWare