上周在解决问题单的时候,发现有个上传日志的广播一直都收到,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去上报。 实测通过,问题解决。
|