开发中需求需要监听开机广播android.intent.action.BOOT_COMPLETED,然后让应用开机自启动。以前测试总是傻傻的关机然后再开机再验证有没自启动,很浪费时间,现在发现原来可以通过adb shell命令模拟开机广播,记录下
模拟开机广播
adb shell am broadcast -a android.intent.action.BOOT_COMPLETED
当然你也可以直接指定自己定义BroadcastReceiver接收广播,如下
adb shell am broadcast -a android.intent.action.BOOT_COMPLETED -n com.him.mypkg/com.him.mypkg.receiver.BootReceiver
权限拒绝
在有些设备上可能会报类似java.lang.SecurityException: Permission Denial: not allowed to send broadcast android.intent.action.BOOT_COMPLETED from pid=3715, uid=2000这样的错误
遇到这个错误可以先执行adb root再执行发送广播的命令就可以了
adb root
adb shell am broadcast -a android.intent.action.BOOT_COMPLETED
无法接收到广播
无法接收到广播可能是以下几个原因造成的
- 未添加权限<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>。
- 被系统自带或360手机助手等拦截,需在权限管理设置里放开开机自启动的权限。
- 应用安装到sd卡上,安装在sd卡上的应用是收不到BOOT_COMPLETED广播的。
- 系统开启了Fast Boot模式,这种模式下系统启动并不会发送BOOT_COMPLETED广播。
- 应用程序安装后重来没有启动过,这种情况下应用程序接收不到任何广播。
第一次安装无效,需重新启动
收不到广播,被系统拦截