三星Android 7/8/9设备SecurityException权限拒绝问题求助
解决三星Android 7/8/9设备上的
java.lang.SecurityException(跨用户权限拒绝) 异常信息
Fatal Exception: java.lang.SecurityException: Permission Denial: broadcast from android asks to run as user -1 but is calling from user 0; this requires android.permission.INTERACT_ACROSS_USERS_FULL or android.permission.INTERACT_ACROSS_USERS
解决方案
修正广播的用户ID指定
不要手动将广播的目标用户ID设置为-1(代表所有用户),普通应用没有权限跨用户发送广播。发送广播时,使用默认的当前用户(用户0)即可,移除任何主动设置setUserId(-1)的代码逻辑,确保广播仅在当前用户空间内传递。适配三星设备的严格权限校验
三星在Android 7-9版本中对跨用户操作的权限校验比原生系统更严格:- 如果是自定义广播,优先使用局部广播替代全局广播(比如旧版本可用的
LocalBroadcastManager),避免触发系统的跨用户权限检查。 - 如果是监听系统广播,确认是否必须使用该广播,若有替代方案(比如ContentObserver或本地回调),优先替换以绕过权限限制。
- 如果是自定义广播,优先使用局部广播替代全局广播(比如旧版本可用的
放弃申请受限系统权限
INTERACT_ACROSS_USERS_FULL和INTERACT_ACROSS_USERS属于系统签名级权限,普通应用无法通过Manifest申请获得(即使添加权限声明,安装时也会被系统拒绝),因此不要尝试在Manifest中添加这两个权限。
内容的提问来源于stack exchange,提问作者Ayushi Khandelwal
相关产品推荐
相关产品推荐

