为什么部分设备调用Intent.ACTION_MAIN需MANAGE_USERS权限?
异常原因
- 该问题仅出现在有定制ROM的特殊设备上,你抛出的异常对应的是亚马逊Kindle系列设备,这类设备在未完成首次开机引导(OOBE,Out Of Box Experience)阶段,系统默认响应HOME Intent的页面是厂商定制的引导页
com.amazon.kindle.otter.oobe/.OobeHomeActivity,普通第三方应用没有权限启动该特殊页面,系统会要求android.permission.MANAGE_USERS系统级权限,该权限仅系统内置应用可以申请,普通第三方应用无法获取。 - 部分设备开启多用户/工作资料模式时,当前应用处于受限的工作资料空间,跨用户启动桌面的操作会被系统拦截,同样会触发该权限异常。
解决方法
- 优先使用Android官方提供的退后台API替代直接启动桌面的逻辑,
moveTaskToBack(true)可以将当前应用的任务栈退到后台,效果和跳转到桌面一致,不会触发权限异常,适配性更高。 - 如果确实需要使用HOME Intent跳转桌面,要提前做有效性校验并且添加异常捕获,示例代码如下:
Intent startMain = new Intent(Intent.ACTION_MAIN); startMain.addCategory(Intent.CATEGORY_HOME); startMain.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); // 先校验是否有可响应的Activity if (startMain.resolveActivity(getPackageManager()) != null) { try { startActivity(startMain); } catch (SecurityException e) { // 捕获权限异常,走降级逻辑 moveTaskToBack(true); } } else { // 无响应的桌面Activity,走降级逻辑 moveTaskToBack(true); }
- 不需要尝试申请
android.permission.MANAGE_USERS权限,普通应用即使在清单文件中声明也无法获取该系统级权限,仅做异常兜底即可。
内容的提问来源于stack exchange,提问作者Hong
相关产品推荐
相关产品推荐

