【问题标题】:"Exported activity does not require permission" when attempting to launch from a URI尝试从 URI 启动时“导出的活动不需要权限”
【发布时间】:2012-07-13 01:26:51
【问题描述】:

我正在尝试使用 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 问题,但所有解决方案似乎都不起作用。

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

谢谢

【问题讨论】:

标签: android uri intentfilter


【解决方案1】:

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

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

【讨论】:

  • 我在更新 SDK 时遇到了同样的问题。就我而言,警告仅针对可搜索的活动出现
  • 感谢您的回答,我已将“android:exported”属性添加到我的活动中,但我必须将其设置为 true,因为应该可以从外部访问意图。现在我再次收到警告“导出的活动不需要许可”。如果“android:exported”为真,有人知道缺少什么吗?
  • 我认为这个答案是错误的。如果我设置android:exported="false" 选择对话框将不会打开。清理项目为我解决了这个问题。
  • 答案似乎对服务和接收者也有效。
【解决方案2】:

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

【讨论】:

  • 你是绝对正确的!确实它确实清除了许多混乱的警告,包括这些。 “我喜欢早上看到无警告代码”(d'apres apocalypse now)
  • 只是再次编译项目时再次弹出警告?这就是发生在我身上的事。
【解决方案3】:

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

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

您可以在Android Documentation获取更多信息。

感谢@furykid 提供链接。

【讨论】:

  • 我没有意识到“不需要权限”意味着我应该将“android:permission”添加到导出的服务中。这是迄今为止我找到的唯一答案。谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-01-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-10-10
相关资源
最近更新 更多