You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android 11 权限申请弹窗不显示,API 29 模拟器运行正常是什么原因

问题原因
  • Android 11(API 30)新增了位置权限申请的强制限制:不允许同时申请前台位置权限(ACCESS_COARSE_LOCATION、ACCESS_FINE_LOCATION)和后台位置权限(ACCESS_BACKGROUND_LOCATION),如果一次性提交三类权限的申请请求,系统会直接驳回请求,不会弹出授权弹窗。
  • 当前代码将三类位置权限放在同一个请求中触发,刚好触发了该系统限制,因此Android 11设备上无弹窗展示。
  • 额外排查点:如果之前测试过程中用户勾选了「拒绝且不再询问」选项,后续再发起同类权限申请也不会弹出弹窗。

补充说明:FOREGROUND_SERVICE属于普通安装类权限,仅需在Manifest中声明即可,不需要动态申请,无需加入到动态权限申请列表中。

解决方案

1. 调整为分步申请权限

先申请前台位置权限,确认用户授权成功后,再单独申请后台位置权限,示例代码如下:

// 先申请前台位置权限
val REQUEST_CODE_FOREGROUND_LOCATION = 1001
val REQUEST_CODE_BACKGROUND_LOCATION = 1002

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
    requestPermissions(
        arrayOf(
            Manifest.permission.ACCESS_FINE_LOCATION,
            Manifest.permission.ACCESS_COARSE_LOCATION
        ), 
        REQUEST_CODE_FOREGROUND_LOCATION
    )
} else {
    ActivityCompat.requestPermissions(
        this, 
        arrayOf(
            Manifest.permission.ACCESS_FINE_LOCATION,
            Manifest.permission.ACCESS_COARSE_LOCATION
        ), 
        REQUEST_CODE_FOREGROUND_LOCATION
    )
}
// 权限申请回调中处理后续逻辑
override fun onRequestPermissionsResult(
    requestCode: Int,
    permissions: Array<out String>,
    grantResults: IntArray
) {
    super.onRequestPermissionsResult(requestCode, permissions, grantResults)
    when (requestCode) {
        REQUEST_CODE_FOREGROUND_LOCATION -> {
            val isForegroundGranted = grantResults.all { it == PackageManager.PERMISSION_GRANTED }
            if (isForegroundGranted) {
                // 前台权限授权成功,再申请后台位置权限
                if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
                    requestPermissions(
                        arrayOf(Manifest.permission.ACCESS_BACKGROUND_LOCATION),
                        REQUEST_CODE_BACKGROUND_LOCATION
                    )
                }
            } else {
                // 前台权限被拒绝,根据业务逻辑处理,比如提示权限必要性、引导用户到设置页开启
            }
        }
        REQUEST_CODE_BACKGROUND_LOCATION -> {
            // 处理后台位置权限的申请结果
        }
    }
}

2. 额外适配项

  • 若检测到权限被用户永久拒绝,需弹窗说明权限的业务必要性,引导用户跳转应用设置页手动开启权限。
  • 申请后台位置权限前,建议先向用户清晰说明申请该权限的使用场景,符合应用商店的权限合规要求。

内容的提问来源于stack exchange,提问作者André Nogueira

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 23:27:00