我在AndroidManifest中声明了一些接收器:
<!-- 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等)。
两个问题:
exported="false"
对启动接收器、wifi接收器、报警接收器等执行?我想过在android:protectionLevel="signatureOrSystem"
中使用自定义权限,但是文档建议不要使用这个protection level和custom permissions。那么我应该如何处理这个警告呢?
链接到文档和/或一些代码将非常感谢。
发布于 2013-04-20 03:54:13
为什么我在所有接收器上都得不到警告?
因为前两个显然是为Android广播而设计的。最后一个是未知的,部分原因是您没有提供字符串资源值,也可能是因为它们是您自己唯一的操作字符串。
我需要为要从系统服务接收的接收者设置哪些权限才能更正警告
正确的解决方案是删除<intent-filter>
。如果要广播这些Intents
,或者如果要将Intent
包装在getBroadcast()
PendingIntent
中,则不需要操作字符串。使用将Java class对象作为第二个参数的Intent
构造函数,并使用该构造函数:
new Intent(this, BatteryMonitoringReceiver.class)
如果愿意,您仍然可以将操作字符串附加到该Intent
,但是您可以转储<intent-filter>
(路由将基于提供的组件,在本例中为Java类)。
仅当您期望操作系统或第三方应用程序本身启动<intent-filter>
时才使用Intent
(执行您创建的PendingIntent
不算数)。
发布于 2015-02-19 18:51:43
警告“导出的接收器不需要权限”表示,您有一个具有某些操作的intent-filter
(这意味着默认情况下您设置了android:exported="true"
,它现在可以从您的应用程序外部的任何广播公司执行receive broadcasts
操作),因为它可以从应用程序外部的任何广播公司执行receive broadcasts
操作,它会警告您说:“嘿,您确定任何广播公司都可以调用您吗?在我看来,如果只允许那些您通过<代码>D11broadcasters >为此<代码>D10设置了<代码>D9的broadcasters
调用您,效果会更好
通过将 android:exported="false"
添加到接收器标记,可以删除此警告
发布于 2013-07-11 23:23:52
如果您确实想将您的接收器导出到其他进程,您可以在android-manifest文件中添加您自己的权限定义,以避免此警告,例如
<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
https://stackoverflow.com/questions/16112470
复制相似问题