BroadcastReceiver需要android.permission.RECEIVE_BOOT_COMPLETED

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了BroadcastReceiver需要android.permission.RECEIVE_BOOT_COMPLETED相关的知识,希望对你有一定的参考价值。

我的android应用程序需要通知BOOT_COMPLETED事件。 AndroidManifest.xml包含<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" /><application>标签内部我有以下接收器定义:

<receiver android:name=".OnBootReceiver" 
          android:permission="android.permission.RECEIVE_BOOT_COMPLETED">
    <intent-filter>
        <action android:name="android.intent.action.BOOT_COMPLETED" />
    </intent-filter>
</receiver>

需要android:permission="android.permission.RECEIVE_BOOT_COMPLETED"吗?如果它没有到位会发生什么,是否存在任何应用程序能够模拟启动事件并调用我的应用程序的风险?

在一些例子中,the receiver contains the RECEIVE_BOOT_COMPLETED permissionsome the receiver does not。是否存在API级别的特定差异?

答案

是否需要android:permission =“android.permission.RECEIVE_BOOT_COMPLETED”?

不,您不一定要在permission声明中针对此特定情况需要<receiver>属性。来自docs

android:permission

广播公司必须具有向广播接收器发送消息的权限的名称。如果未设置此属性,则<application>元素的permission属性设置的权限适用于广播接收器。如果两个属性均未设置,则接收方不受权限保护。

因此,如果您想确保只有拥有授权权限的广播公司才能发送该属性,您只需要此属性。然而,BOOT_COMPLETED是一个protected intent,无论如何只能由系统发送。拥有它不会有什么坏处,但也没有必要。

编辑:

permission属性留在那里可能不会有什么坏处,但有那么多Android版本和设备更改,我不会包含该属性只是为了确定。我没有将它包含在我的应用中。

另一答案

Android文档说明:如果您未请求此权限,则您当时不会收到广播。

Link

另一答案

给接收者标签

<receiver android:name=".OnBootReceiver">
    <intent-filter>
        <action android:name="android.intent.action.BOOT_COMPLETED"/>
    </intent-filter>
</receiver>

确保还包括已完成的引导权限。

<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>

以上是关于BroadcastReceiver需要android.permission.RECEIVE_BOOT_COMPLETED的主要内容,如果未能解决你的问题,请参考以下文章

为啥 BroadcastReceiver 需要一个默认构造函数?

Android入门第45天-手工发送一个BroadCast

解析BroadcastReceiver之你需要了解的一些东东

BroadcastReceiver详解(基础篇)

BroadcastReceiver

Android服务被杀死[重复]