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

  • 相关阅读:
    01011_怎么打开任务管理器?win7打开任务管理器方法
    php入门之数据类型
    手把手教你开发jquery插件(三)
    手把手教你开发jquery插件
    php7.0新特性
    Java类和对象的概念
    php新手第一次安装mongo
    什么是SQL游标?
    C#学习笔记2
    转发一篇分析LinQ是什么?
  • 原文地址:https://www.cnblogs.com/timseng/p/14393871.html
Copyright © 2020-2023  润新知