BroadcastReceiver需要android.permission.RECEIVE_BOOT_COMPLETED

时间:2016-02-08 11:04:30

标签: android broadcastreceiver android-permissions

我的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级别的特定差异?

3 个答案:

答案 0 :(得分:2)

  

是android:permission =&#34; android.permission.RECEIVE_BOOT_COMPLETED&#34;需要?

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

  

android:permission

     

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

因此,如果您想确保只有拥有授权权限的广播公司才能发送该属性,那么您只需要此属性。但是,BOOT_COMPLETEDprotected intent,只能由系统发送。将它放在那里并不会有什么坏处,但也没有必要。

编辑:

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

答案 1 :(得分:0)

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

Link

答案 2 :(得分:0)

将接收者标记设为

<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"/>