Android应用在未启动的情况下无法收到开机广播

有没有在开发开机自启动的应用中,遇到这样的问题,自己调试测试,开机自启动没任何问题,发给测试就是开机不启动。是不是曾经因为这个问题,怀疑过测试、怀疑过人生,我怀疑过,看看官网就知道了。
Android 3.1开始,Android系统默认的为广播添加了两个标识:

 FLAG_INCLUDE_STOPPED_PACKAGES(表示包含未启动的AppFLAG_EXCLUDE_STOPPED_PACKAGES(表示不包含未启动的App

当我们app安装后,未启动,则标记为stoped状态,只有至少手动打开一次,才能改变状态,接收特定广播,也是为了防止广播无意开启未启动应用的服务。如何解决,解决方案有三个,但都需要系统工程师配合:

  • 更改广播标记,FLAG_INCLUDE_STOPPED_PACKAGES,让包含未启动的应用。
  • 让系统过滤你应用的报名,可以在未启动的情况, 接收开机广播
  • 系统发送一个特定广播,我们应用去接收。

下面是更改广播标记的修改过程:
1、我们先搜索一下这个标记在AMS的位置。在这里插入图片描述
2、然后就可以修改了
在这里插入图片描述
3、编译系统,刷机验证
这里我简单做一个接收开机广播后,启动一个服务做验证
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
验证完成,希望对遇到问题的你有所帮助!!!

Android中,开机启动广播接收者(BroadcastReceiver)并不直接支持设置优先级以确保它总是在其他应用之前接收到广播。然而,一般来说,系统的启动过程有其特定的顺序,开机广播通常在系统初始化阶段发送,这期间一般先处理核心服务和系统组件的启动。 如果你想要一个广播在设备启动时尽快运行,可以尝试以下策略: 1. 将你的BroadcastReceiver添加到`<application>`标签内,而不是`<receiver>`标签下。这样它可以作为默认的系统启动接收者。 ```xml <application> <receiver android:name=".YourBroadcastReceiver" /> </application> ``` 2. 确保你的广播注册在AndroidManifest.xml文件中,且设置了`android:permission="android.permission.RECEIVE_BOOT_COMPLETED"`,这是接收开机广播的基本权限。 3. 使用较低的意图过滤器(IntentFilter),例如,使用`ACTION_BOOT_COMPLETED`,避免过于具体的意图,因为系统可能会根据需求调整广播的传递顺序。 4. 避免使用太长的延迟注册时间(比如使用静态的PendingIntent),因为系统可能会立即开始处理某些关键的启动任务。 尽管如此,上述方法并不能保证你的广播绝对第一个收到,因为系统的启动流程并非线性的,而是依赖于许多因素,如系统优化、硬件资源等。如果确实需要对重要操作有严格的控制,可能需要自定义系统服务并在服务中监听开机事件,但这已经超出常规 BroadcastReceiver 的范围了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

这个Bug有点难搞

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值