我正在尝试使用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问题,并且所有解决方案似乎都不起作用。
如何正确编写活动意图过滤器以避免警告?
由于
答案 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
属性,您可以在其中指定应用需要具有哪些权限才能调用您的活性。感谢@furykid获取链接。