尝试从URI启动时,“导出的活动不需要许可”

我试图从一个URI使用这个SO问题作为参考启动一个Android应用程序。

我有一个清单文件与以下声明的活动:

<activity android:name=".MainActivity"> <intent-filter> <action android:name="android.intent.action.VIEW" /> <data android:scheme="http" android:host="example.com" /> </intent-filter> </activity> 

我正尝试使用http://example.com链接启动MainActivity。 我的问题是我得到警告

 "exported activity does not require permission" 

我看过其他的SO问题,报告这个相同的警告,所有的解决scheme似乎并没有工作。

如何正确编写活动意图filter以避免警告?

谢谢

当我将SDK更新到版本20时,我遇到了同样的问题。 我删除它添加android:导出 propery:

 <activity android:name=".MainActivity" android:exported="false"> <intent-filter> <action android:name="android.intent.action.VIEW" /> <data android:scheme="http" android:host="example.com" /> </intent-filter> </activity> 

清单中的活动声明内部。 当然,如果活动仅用于应用程序内部使用,您可以指定这一点

修复它的原因可以在文档中find:

android:exported :默认值取决于活动是否包含意图filter。 没有任何filter意味着活动只能通过指定其确切的类名来调用。 这意味着这个活动只是为了应用程序内部使用(因为其他人不知道类名)。 所以在这种情况下,默认值是“false”。 另一方面, 至less存在一个filter意味着该活动是为了外部使用,所以默认值是“true”

由于“导出的接收者不需要许可” (至lessLINT消息是清楚的),你明白了。

你有没有尝试清理你的项目(项目>清洁…)? 它修复了我的项目的警告,也许是你的。

要摆脱这个警告,你有两个select:

  • 您可以在活动上设置属性android:exported="false" ,以防止其他应用程序通过意图调用您的活动
  • 或者,如果允许其他应用程序调用您的Activity,则您需要添加一个android:permission属性,您可以在其中指定应用程序需要具有哪些权限才能调用您的活动。
  • 如果您希望允许其他应用程序在没有任何特殊许可的情况下打电话给您的活动,那么您必须在清单中发出警告。

您可以在Android文档中获得更多信息。

感谢@furykid的链接。