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

Android 12附近设备权限引发蓝牙连接应用崩溃问题咨询

Android 12蓝牙权限问题解答

是否为Android 12强制要求

是。Android 12(API 31)对蓝牙相关权限做了隐私向的重构,将原有的蓝牙权限拆分到「附近设备」权限组,其中BLUETOOTH_CONNECT属于运行时权限,无论应用的目标SDK版本是多少,只要运行在Android 12及以上的设备上,都必须动态申请该权限后才能执行蓝牙连接操作,仅在Manifest中声明权限无效,也不存在绕过用户授权的方案,必须用户手动同意授权后才能正常使用蓝牙功能。

同时适配API 28及以上版本的方案

1. Manifest权限声明兼容

按如下规则声明权限,自动适配不同系统版本:

<!-- 适配API 30及更低版本的老版蓝牙权限 -->
<uses-permission android:name="android.permission.BLUETOOTH" android:maxSdkVersion="30" />
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" android:maxSdkVersion="30" />
<!-- 若你的应用需要扫描蓝牙设备,API 30及以下需要定位权限 -->
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" android:maxSdkVersion="30" />

<!-- 适配API 31及更高版本的新版蓝牙权限 -->
<uses-permission android:name="android.permission.BLUETOOTH_CONNECT" />
<!-- 如果只需要连接已知MAC地址的设备,不需要扫描蓝牙,可以不声明下面的SCAN权限 -->
<uses-permission android:name="android.permission.BLUETOOTH_SCAN" android:usesPermissionFlags="neverForLocation" />

2. 代码逻辑分支适配

执行蓝牙相关操作前先判断系统版本,走对应权限校验逻辑:

  • 运行系统版本 ≥ Android 12(Build.VERSION.SDK_INT ≥ 31):先动态申请BLUETOOTH_CONNECT权限,用户授权通过后再执行蓝牙连接操作
  • 运行系统版本 ≤ 30:走原有业务逻辑即可,不需要申请新权限
  • 注:目标SDK ≤30的应用申请BLUETOOTH_CONNECT时,系统弹窗显示的授权内容为「允许应用访问附近设备」,和设置页的「附近设备」权限为同一个。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 03:06:03