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

问题描述 投票:0回答:3

我正在尝试使用 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"

我查看了其他报告相同警告的问题,但所有解决方案似乎都不起作用。

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

谢谢

android uri intentfilter
3个回答
94
投票

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

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

既然“导出的接收者不需要权限”(至少LINT消息是明确的),你明白了。


41
投票

您是否尝试清理您的项目(项目>清理...)?它修复了我的项目的这个警告,也许是你的项目。


18
投票

要消除此警告,您有两种选择:

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

Android 文档中获取更多信息。

感谢

@furykid提供链接。

© www.soinside.com 2019 - 2024. All rights reserved.