1:问题现象
在进行Android平台需求移植的过程中,在某一应用中添加了注册广播相关的代码,在编译完成后出现了,应用停止运行或闪退的现象
log问题:根据操作与log日志的观察,发现在点击应用应用停止运行时抛出了报错,如下
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.android.soundrecorder/com.sprd.soundrecorder.RecorderActivity}:
java.lang.SecurityException:
com.android.soundrecorder:
One of RECEIVER_EXPORTED or RECEIVER_NOT_EXPORTED should be specified
when a receiver isn't being registered exclusively for system broadcasts...
2:代码检查
根据代码分析到走入下面方法后就没有走出来:
根据上面log与此处代码判断是注册广播出现了某个问题。
3:分析解决
搜索后知道:
对比Android13,Android14对广播,注册context-registered接收器时需要 指定导出标志 。
如:
Android13:
registerReceiver(mReceiver, intentFilter);
Android14:
registerReceiver(mReceiver, intentFilter,Context.RECEIVER_EXPORTED);
即给registerReceiver方法增加第三个参数:
RECEIVER_EXPORTED
或者
RECEIVER_NOT_EXPORTED