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

时间:2012-07-13 01:26:52

标签: android uri intentfilter

我正在尝试使用this SO question作为参考从URI启动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问题,并且所有解决方案似乎都不起作用。

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

由于

3 个答案:

答案 0 :(得分:91)

当我将SDK更新到版本20 时,我遇到了同样的问题。我删除它添加 android:exported 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>

在清单中的活动声明中。当然,如果活动仅用于内部应用程序

,则可以指定此项

修复它的原因可以在docs找到:

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

由于“导出的接收者不需要许可”(至少LINT消息是明确的),你得到了它。

答案 1 :(得分:40)

您是否尝试清理项目(项目&gt;清洁......)?它修复了我的项目的警告,也许是你的。

答案 2 :(得分:18)

要摆脱此警告,您有两种选择:

  • 您可以将活动中的属性android:exported="false"设置为阻止其他应用通过意图调用您的活动
  • 或者,如果允许其他应用调用您的活动,您需要添加android:permission属性,您可以在其中指定应用需要具有哪些权限才能调用您的活性。
  • 如果您想允许其他应用程序在没有任何特殊许可的情况下调用您的活动,那么您必须在Manifest中发出警告。

您可以在Android Documentation

中获取更多信息

感谢@furykid获取链接。