Android 引导完成的广播接收器不适用于动态注册
我创建了一个广播接收器,并使用以下方法在清单中注册它工作正常 静态方式注册广播接收机(工作正常)Android 引导完成的广播接收器不适用于动态注册,android,broadcastreceiver,Android,Broadcastreceiver,我创建了一个广播接收器,并使用以下方法在清单中注册它工作正常 静态方式注册广播接收机(工作正常) <receiver android:name="DeviceRestartListener" android:enabled="true" android:exported="false" > <intent-filter> <action android:name="android
<receiver
android:name="DeviceRestartListener"
android:enabled="true"
android:exported="false" >
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
</category> -->
</intent-filter>
</receiver>
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
没有编译和运行时错误。但在设备重新启动后,接收器未接收广播
谢谢即使在清单中静态声明或使用应用程序上下文动态注册,所有广播接收器也不会工作。例如,意图行为,如
Intent.ACTION_SCREEN_OFF
Intent.ACTION_BOOT_COMPLETED
及
必须动态注册。在清单中声明这些操作时,不会激发它们。一些故意的行为,比如
Intent.ACTION_TIME_CHANGED;
Intent.ACTION_TIME_TICK;
Intent.ACTION_TIMEZONE_CHANGED;
将在通过窗口标记不为null的上下文动态注册时激发。(如活动或对话框)
与此类似,一些意图操作如下
Intent.ACTION_SCREEN_OFF
Intent.ACTION_BOOT_COMPLETED
仅当它们使用清单静态注册时才起作用在代码中注册接收者 当我们在代码中注册接收者时,我们必须在应用程序被销毁时(实际上,当注册它的活动或服务被销毁时)注销它
在清单中注册接收人 当我们在清单中声明它时,即使您的应用程序未运行,您也会使它可用 何时使用哪种方法注册 注册BroadcastReceiver的方法取决于应用程序对系统事件的处理方式。我认为,基本上有两个原因让你的应用程序想了解系统范围内的事件:
还有一些事件甚至不允许您静态注册。例如,每分钟广播一次Intent.ACTION\u TIME\u TICK事件。这是一个明智的决定,因为静态接收器会不必要地耗尽电池电量。“但接收器在设备重新启动后不会接收广播”——为什么会这样?毕竟,一旦进程终止,您的
BroadcastReceiver
实例就不再存在,更不用说重新启动了。