adb shell 命令行模拟发送开机广播android.intent.action.BOOT_COMPLETED测试开机自启动

开发中需求需要监听开机广播android.intent.action.BOOT_COMPLETED,然后让应用开机自启动。以前测试总是傻傻的关机然后再开机再验证有没自启动,很浪费时间,现在发现原来可以通过adb shell命令模拟开机广播,记录下

模拟开机广播

1
adb shell am broadcast -a android.intent.action.BOOT_COMPLETED

Click and drag to move

当然你也可以直接指定自己定义BroadcastReceiver接收广播,如下

1
adb shell am broadcast -a android.intent.action.BOOT_COMPLETED -n com.him.mypkg/com.him.mypkg.receiver.BootReceiver

Click and drag to move

权限拒绝

在有写设备上可能会报类似java.lang.SecurityException: Permission Denial: not allowed to send broadcast android.intent.action.BOOT_COMPLETED from pid=3715, uid=2000这样的错误

遇到这个错误可以先执行adb root再执行发送广播的命令就可以了

1
2
adb root
adb shell am broadcast -a android.intent.action.BOOT_COMPLETED

Click and drag to move

无法接收到广播

无法接收到广播可能是以下几个原因造成的

  1. 未添加权限
  2. 被系统自带或360手机助手等拦截,需在权限管理设置里放开开机自启动的权限。
  3. 应用安装到sd卡上,安装在sd卡上的应用是收不到BOOT_COMPLETED广播的。
  4. 系统开启了Fast Boot模式,这种模式下系统启动并不会发送BOOT_COMPLETED广播。
  5. 应用程序安装后重来没有启动过,这种情况下应用程序接收不到任何广播。

第一次安装无效,需重新启动

收不到广播,被系统拦截