zoukankan      html  css  js  c++  java
  • 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 无法接受系统广播的问题

  • 相关阅读:
    centos6.5的开机自动部署出现unsupported hardware detected
    Nginx的安装
    sshpass的使用方法
    dhcp 的安装和配置文件
    SMBus总线概述
    SMBus与I2C的差别
    vim搭建笔记
    pcie dma的玩法
    Virtex6 PCIe 超简版基础概念学习(二)
    揭开Altera公司支持OpenCL的设计工具的神秘面纱
  • 原文地址:https://www.cnblogs.com/timseng/p/14393871.html
Copyright © 2011-2022 走看看