我正在尝试使用 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"
我查看了其他报告相同警告的问题,但所有解决方案似乎都不起作用。
如何正确编写活动意图过滤器以避免警告?
谢谢
当我将 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消息是明确的),你明白了。
您是否尝试清理您的项目(项目>清理...)?它修复了我的项目的这个警告,也许是你的项目。