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

Android Studio开发蓝牙应用已声明BLUETOOTH_CONNECT权限仍报错求助

Android蓝牙权限报错解决方案

权限规则说明

  • BLUETOOTH_CONNECT是Android 12(API 31)及以上版本新增的运行时危险权限,仅在AndroidManifest.xml中声明不生效,必须在调用蓝牙相关API前向用户申请动态授权
  • 由于你的项目最低兼容API 16,需要做版本适配:
    • API ≤30:调用getBondedDevices仅需要Manifest中声明的普通权限BLUETOOTH,无需动态申请
    • API ≥31:调用getBondedDevices必须先获得用户授予的BLUETOOTH_CONNECT动态权限,否则会直接抛出你遇到的java.lang.SecurityException异常

排查步骤

  1. 先核对AndroidManifest.xml配置是否符合适配规则,参考正确配置:
<!-- 适配Android 12以下版本的蓝牙基础权限 -->
<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_SCAN" android:usesPermissionFlags="neverForLocation" />
<uses-permission android:name="android.permission.BLUETOOTH_CONNECT" />
<uses-permission android:name="android.permission.BLUETOOTH_ADVERTISE" />
<!-- 蓝牙硬件特性声明 -->
<uses-feature android:name="android.hardware.bluetooth" android:required="false" />
  1. 如果Manifest配置和上述规则一致,请直接复查MainActivity.java的动态权限申请逻辑:
    • 所有调用蓝牙API(包括getBondedDevices)的位置,都要先做版本判断,API≥31时先校验BLUETOOTH_CONNECT权限是否已授予,未授权时先发起动态权限申请,用户同意后再执行后续蓝牙操作
    • 禁止未做权限校验直接调用蓝牙API

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 17:36:01