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 无法接受系统广播的问题

posted @ 2021-02-09 18:44  timseng  阅读(2112)  评论(0编辑  收藏  举报