Android API 34中调用startActivity崩溃问题求助
Android API 34 启动Activity触发SecurityException问题解决
错误含义
该错误是Android 14(API 34)新增的广播接收器安全限制导致:当注册的广播接收器并非仅用于接收系统广播时,必须显式指定RECEIVER_EXPORTED或RECEIVER_NOT_EXPORTED属性。
虽然崩溃栈指向startActivity方法,但问题根源并非启动Activity的代码本身,而是你的App中存在未声明导出属性的广播接收器(静态或动态注册),在API 34的系统安全检查中触发了异常。
解决方法
1. 修复静态注册的广播接收器
检查AndroidManifest.xml中所有<receiver>标签,为其添加android:exported属性,根据业务需求设置为true(允许其他应用触发)或false(仅自身应用可用):
<receiver android:name=".MyBroadcastReceiver" android:exported="false"> <!-- 按需选择true/false --> <intent-filter> <!-- 你的广播过滤器规则 --> </intent-filter> </receiver>
2. 修复动态注册的广播接收器
如果使用registerReceiver()动态注册接收器,需要在注册时添加RECEIVER_EXPORTED或RECEIVER_NOT_EXPORTED标记:
// Kotlin示例 val myReceiver = MyBroadcastReceiver() val intentFilter = IntentFilter("com.familiekoning.radionedplus.MY_CUSTOM_ACTION") // 根据接收器用途选择标记 registerReceiver(myReceiver, intentFilter, RECEIVER_NOT_EXPORTED)
3. 系统广播接收器特殊处理
如果接收器仅用于接收系统广播(如ACTION_BOOT_COMPLETED),可指定RECEIVER_EXPORTED,同时确保intent-filter仅匹配系统广播动作。
补充说明
API 34系统在启动Activity时,会校验App内所有已注册组件的安全配置,只要有一个广播接收器不符合属性要求,就会抛出该SecurityException,因此看似启动Activity崩溃,实际是广播接收器的配置问题。
内容的提问来源于stack exchange,提问作者Patrick Koning
相关产品推荐
相关产品推荐

