Android新版本广播无法接收问题Background execution not allowed

本文针对Android 8.0及以上版本中后台应用无法正常接收广播的问题,提供了一种解决方案。通过调整发送广播的方式,使得跨模块间的广播能够被正确接收。

上周在解决问题单的时候,发现有个上传日志的广播一直都收到,log上没记录,很奇怪,然后查看日志,发现下面这行:

03-24 17:49:38.694   912  1040 W BroadcastQueue: Background execution not allowed: receiving Intent { act=com.mobiledrivetech.dms.LOGCAT_FILE_UPLOAD flg=0x10 } to com.mobiledrivetech.dms/.CameraService$AccountQuitReceiver

关键词:

Background execution not allowed

什么意思呢?就是不合法。 在 SDK 26,通过令静态注册的广播接收器失效 以限制后台过多应用启动,接受广播等情况。
所以我们需要做适配,我是这样做的:
(A:为需要启动的包名,B:为receiver的全类名)

    public static void sendBroadCaseToUploadData(Context context){
        Log.d(TAG, "sendBroadCaseToUploadData <<<  ");
        Intent intent = new Intent();
        intent.setAction("com.mobiledrivetech.dms.LOGCAT_FILE_UPLOAD");
        ComponentName componentName = new ComponentName("A", "B");
        intent.setComponent(componentName);
        if (Build.VERSION.SDK_INT >= 26){
            intent.addFlags(Intent.FLAG_ACTIVITY_PREVIOUS_IS_TOP);//加上这句话,可以解决在android8.0系统以上2个module之间发送广播接收不到的问题}
        }
        context.sendBroadcast(intent);
        Log.d(TAG, "sendBroadCaseToUploadData >>>  ");
    }

这样执行后,我这里人脸识别注册或者登录失败后,会调转到dms并且发送广播通知dms进行aidl远程调用我这边的服务进行事件上报,我这边用的是jar去上报。
实测通过,问题解决。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值