app无法响应开机广播

app无法响应开机广播或者静态广播

开机广播

部分app会有开机要求自启动功能。通过监听系统的开机广播,可以轻松实现该功能。但是我遇到了开机广播经常无法响应的情况,在网上也看了很多大神的分析。在这分享一下我遇到的情况,解决方法。

广播自我检查

  1. 必须申请权限

这里我们是开机广播,就申请监听开机广播的权限

<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
  1. app安装完成后,需要首次启动

Android 3.1以后,app在安装后,必须主动启动,注册静态开机广播后,之后才可以收到开机广播。详细官方描述。
因为系统的package manager增加了对处于“stopped state”应用的管理。“stopped state”指的是安装后从来没有启动过的应用。并且系统广播默认不会唤起处于“stopped state”的应用。

注意,系统级别的app不需要这些操作,直接就可以获取开机广播

  1. 检查app是否正常响应开机广播

有可能是代码问题,导致未收到广播,或者未作响应处理。我们可以模拟系统来发送一下广播。指令如下:

adb shell am broadcast -a <ACTION>
adb shell am broadcast -a android.intent.action.BOOT_COMPLETED
  1. 查看系统是否发送开机广播

极少部分系统会不发送开机广播。我们可以查看一下发送广播的记录,指令如下:

dumpsys |grep BroadcastRecord

打印内容从上到下,是按照从新到旧的顺序排列的,也就是说第一行是系统最新发出的一个广播。

  1. 最后的倔强

我遇到的问题,app启动后,立即关机重启,app无法收到开机广播。最后发现把app启动后,运行了10~20秒后,重启系统后,app就可以收到开机广播了。我查看源码分析,静态广播注册过程中,有耗时操作,可能是立即关机时,该app开机广播还未注册到系统内。

最后,欢迎大家指点补充。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值