Android 接收不到广播的原因解决

1.高版本,用户发送自定义广播,接收不到信息

Intent intent = new Intent();
intent.setAction("demo.destroy");
intent.setComponent( new ComponentName( "luoy.com.servicebackstage" ,
        "luoy.com.servicebackstage.MyReceiver") );
sendBroadcast(intent);

setComponent的两个参数,第一个是包名,第二个是Receive的路径

2.系统广播接收不到

一些特殊的广播,必须动态注册,静态注册是不起效果的

类似,屏幕的锁屏和开屏

IntentFilter recevierFilter=new IntentFilter();
recevierFilter.addAction(Intent.ACTION_SCREEN_ON);
recevierFilter.addAction(Intent.ACTION_SCREEN_OFF);
MyReceiver receiver=new MyReceiver();
registerReceiver(receiver, recevierFilter);
Android 7.1 (API 级别 25) 的系统更改了BroadcastReceiver的注册机制,特别是对于 BootCompletedReceiver 来说。如果你的应用在设备启动后无法接收到 BootCompletedReceiver 广播,可能是由于以下几个原因: 1. **权限问题**:从 API 26 开始,为了防止滥用,应用需要在 manifest 文件中明确声明接收 BootCompleted 广播的意图过滤器,并添加 `<uses-permission>` 标签请求 `android.permission.RECEIVE_BOOT_COMPLETED`。 ```xml <receiver android:name=".YourBootReceiver"> <intent-filter> <action android:name="android.intent.action.BOOT_COMPLETED" /> </intent-filter> <meta-data android:name="android.support.PARENT_ACTIVITY" android:value=".YourParentActivity" /> </receiver> ``` 2. **注册时机**:在 Android Oreo 及以上版本,你需要确保在 `onCreate()` 或 `onStartCommand()` 中手动注册 BroadcastReceiver,而不是依赖于系统的生命周期回调。因为当应用处于前台运行时,系统可能会延迟接收器的注册。 ```java @Override public void onStartCommand(Intent intent, int flags, int startId) { registerReceiver(receiver, new IntentFilter(BOOT_COMPLETED_INTENT)); // ...其他操作... return super.onStartCommand(intent, flags, startId); } private BroadcastReceiver receiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { // ...处理BootCompleted事件... } }; ``` 3. **服务状态**:如果 BroadcastReceiver 是在一个 Service 中创建的,确保该服务已经启动并且注册了 BroadcastReceiver。 4. **应用被停用**:如果用户手动将应用设置为后台暂停或者卸载,那么 BootCompletedReceiver 就不会被触发。确保你的应用至少有一个活动在前台运行,或者用户允许它在后台运行。 5. **硬件重启限制**:某些设备可能有安全措施阻止应用程序在特定时间(如首次开机或强制重启后的短时间内)接收到 BootCompleted 广播。检查设备是否有这种限制。
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值