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

Android12附近设备权限检测异常及动态申请方法咨询

问题核心原因

你遇到的权限检测始终返回true的问题,是Android 12(API 31)的附近设备权限兼容规则导致的,最常见的触发场景是App的targetSdkVersion低于31:当target版本低于31时,系统会默认授予BLUETOOTH_CONNECT等新蓝牙权限,即便你手动在设置页关闭权限,checkSelfPermission也会固定返回授权成功,这是系统向后兼容的默认逻辑。


正确处理步骤

  • 第一步:核对清单文件权限配置
    在AndroidManifest.xml中按版本适配蓝牙相关权限,旧版蓝牙权限添加maxSdkVersion限制,Android 12+的新权限按需声明:
<!-- 适配Android 11及更低版本的蓝牙权限 -->
<uses-permission android:name="android.permission.BLUETOOTH" android:maxSdkVersion="30" />
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" android:maxSdkVersion="30" />

<!-- Android 12+ 附近设备权限,按实际功能需求声明 -->
<uses-permission android:name="android.permission.BLUETOOTH_CONNECT" />
<!-- 如果蓝牙扫描不需要关联位置信息,可添加usesPermissionFlags避免申请位置权限 -->
<uses-permission android:name="android.permission.BLUETOOTH_SCAN" android:usesPermissionFlags="neverForLocation" />
  • 第二步:运行时权限检测
    检测前先判断系统版本,仅在Android 12及以上版本检测新蓝牙权限,低于该版本的系统不需要申请附近设备权限:
// Java 检测逻辑示例
private static final int REQUEST_NEARBY_PERMISSION = 1001;

private boolean hasNearbyPermission(Context context) {
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {
        return ContextCompat.checkSelfPermission(context, Manifest.permission.BLUETOOTH_CONNECT) 
                == PackageManager.PERMISSION_GRANTED;
    }
    // 低于Android 12版本无需新权限,直接返回有权限
    return true;
}
  • 第三步:权限申请逻辑
    检测到未授权时,仅在Android 12及以上版本申请对应权限,系统会自动弹出附近设备权限申请弹窗:
// Java 申请逻辑示例
if (!hasNearbyPermission(this)) {
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {
        ActivityCompat.requestPermissions(this,
                new String[]{Manifest.permission.BLUETOOTH_CONNECT, Manifest.permission.BLUETOOTH_SCAN},
                REQUEST_NEARBY_PERMISSION);
    }
}

补充注意事项

如果用户之前拒绝权限时勾选了「不再询问」,调用申请接口不会弹出系统弹窗,此时需要自定义提示引导用户跳转到应用设置页手动开启权限。

权限设置页截图

内容的提问来源于stack exchange,提问作者luckysing_noobster

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 18:27:03