首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >android -“导出的接收者不需要权限”的接收者意味着从系统服务接收

android -“导出的接收者不需要权限”的接收者意味着从系统服务接收
EN

Stack Overflow用户
提问于 2013-04-20 03:48:59
回答 5查看 41.4K关注 0票数 78

我在AndroidManifest中声明了一些接收器:

代码语言:javascript
复制
<!-- no warning -->
<receiver
    android:name=".receivers.TriggerMonitoringBootReceiver"
    android:enabled="false">
    <intent-filter>
        <action android:name="android.intent.action.BOOT_COMPLETED" />
    </intent-filter>
</receiver>

<!-- no warning -->
<receiver
    android:name=".receivers.ScanResultsReceiver"
    android:enabled="false">
    <intent-filter>
        <action android:name="android.net.wifi.SCAN_RESULTS" />
    </intent-filter>
</receiver>

<!-- warning : Exported receiver does not require permission-->
<receiver
    android:name=".receivers.BatteryMonitoringReceiver"
    android:enabled="false">
    <intent-filter>
        <action android:name="@string/intent_action_setup_alarm" />
        <action android:name="@string/intent_action_cancel_alarm" />
        <action android:name="@string/intent_action_monitor" />
    </intent-filter>
</receiver>

第一个用于接收BOOT_COMPLETED操作。第二个用于接收android.net.wifi.SCAN_RESULTS。第三个用于接收我广播的一些动作(intent_action_monitor)和由AlarmManager广播的一些动作(intent_action_setup_alarm等)。

两个问题:

  • 为什么我在所有接收器上都得不到警告?
  • 我需要为要从系统服务接收的接收器设置什么权限才能更正警告(我了解它是关于什么的,无论如何我不希望任何人使用我的接收器)?Will exported="false" 对启动接收器、wifi接收器、报警接收器等执行

我想过在android:protectionLevel="signatureOrSystem"中使用自定义权限,但是文档建议不要使用这个protection levelcustom permissions。那么我应该如何处理这个警告呢?

链接到文档和/或一些代码将非常感谢。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2013-04-20 03:54:13

为什么我在所有接收器上都得不到警告?

因为前两个显然是为Android广播而设计的。最后一个是未知的,部分原因是您没有提供字符串资源值,也可能是因为它们是您自己唯一的操作字符串。

我需要为要从系统服务接收的接收者设置哪些权限才能更正警告

正确的解决方案是删除<intent-filter>。如果要广播这些Intents,或者如果要将Intent包装在getBroadcast() PendingIntent中,则不需要操作字符串。使用将Java class对象作为第二个参数的Intent构造函数,并使用该构造函数:

代码语言:javascript
复制
new Intent(this, BatteryMonitoringReceiver.class)

如果愿意,您仍然可以将操作字符串附加到该Intent,但是您可以转储<intent-filter> (路由将基于提供的组件,在本例中为Java类)。

仅当您期望操作系统或第三方应用程序本身启动<intent-filter>时才使用Intent (执行您创建的PendingIntent不算数)。

票数 71
EN

Stack Overflow用户

发布于 2015-02-19 18:51:43

警告“导出的接收器不需要权限”表示,您有一个具有某些操作的intent-filter (这意味着默认情况下您设置了android:exported="true",它现在可以从您的应用程序外部的任何广播公司执行receive broadcasts操作),因为它可以从应用程序外部的任何广播公司执行receive broadcasts操作,它会警告您说:“嘿,您确定任何广播公司都可以调用您吗?在我看来,如果只允许那些您通过<代码>D11broadcasters >为此<代码>D10设置了<代码>D9的broadcasters调用您,效果会更好

通过将 android:exported="false" 添加到接收器标记,可以删除此警告

票数 41
EN

Stack Overflow用户

发布于 2013-07-11 23:23:52

如果您确实想将您的接收器导出到其他进程,您可以在android-manifest文件中添加您自己的权限定义,以避免此警告,例如

代码语言:javascript
复制
<permission
    android:name="com.yourpage.permission.YOUR_PERMISSION"
    android:protectionLevel="normal" />

<uses-permission
    android:name="com.yourpage.permission.YOUR_PERMISSION" />

<receiver <!-- warning : Exported receiver does not require permission-->
    android:name=".receivers.BatteryMonitoringReceiver"
    android:permission="com.yourpage.permission.YOUR_PERMISSION"
    android:enabled="false" >
    <intent-filter>
        <action android:name="@string/intent_action_setup_alarm" />
        <action android:name="@string/intent_action_cancel_alarm" />
        <action android:name="@string/intent_action_monitor" />
    </intent-filter>
</receiver> 

有关更多信息,请参阅http://developer.android.com/training/articles/security-tips.html

票数 25
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16112470

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档