Android 8.0 SDK 26之后无法接收广播
app要处理系统广播,今天在android10上发现没有接收到系统广播
排查相关日志发现
BroadcastQueue: Background execution not allowed: receiving Intent {'我们要接收的广播'.....}
搜索资料发现
在 SDK >= 26,通过令静态注册的广播接收器失效 以限制后台过多应用启动,接受广播等情况。
基于对广播的严格控制,大幅度减少了静态广播给第三方应用的使用,也是出于限制后台启动的作用。
故类似 android.intent.action.PACKAGE_ADDED 已经无法通过静态广播来监听,但是我们可以通过动态广播注册监听。当然动态广播要求应用要活着,如果被kill掉了,仍旧无法接受到。
静态广播用不了,又要保活,那就动态注册广播监听到服务里面
<span style="font-size:12px;">package com.itheima.register; import android.app.Service; import android.content.Intent; import android.content.IntentFilter; import android.os.IBinder; public class RegisterService extends Service { private ScreenReceiver receiver; @Override public IBinder onBind(Intent intent) { // TODO Auto-generated method stub return null; } @Override public void onCreate() { super.onCreate(); //1.创建广播接收者对象 receiver = new ScreenReceiver(); //2.创建intent-filter对象 IntentFilter filter = new IntentFilter(); filter.addAction(Intent.ACTION_SCREEN_OFF); filter.addAction(Intent.ACTION_SCREEN_ON); //3.注册广播接收者 registerReceiver(receiver, filter); } @Override public void onDestroy() { super.onDestroy(); //解除注册 unregisterReceiver(receiver); } }
同时对低android版本仍然可以使用静态注册
至此解决小米华为 android8 android9 android 10 无法接受系统广播的问题