Android 14下BLE连接报错:蓝牙地址无效问题求助
Android 14中HM-10 BLE连接报错“蓝牙地址无效”解决方案
我开发的BLE应用在Android 13上能正常连接HM-10芯片,但到Android 14就报错:XX:XX:XX:XX:XX:XX is not a valid Bluetooth address.,查了Android 14发布说明没找到相关蓝牙变更记录,权限配置如下:
<uses-permission android:name="android.permission.BLUETOOTH_SCAN"/> <uses-permission android:name="android.permission.BLUETOOTH_ADVERTISE" /> <uses-permission android:name="android.permission.BLUETOOTH_CONNECT" /> <uses-feature android:name="android.hardware.bluetooth" android:required="false" /> <uses-feature android:name="android.hardware.bluetooth_le" android:required="false" /> <uses-feature android:name="android.hardware.camera" android:required="false" /> <uses-permission android:name="android.permission.FOREGROUND_SERVICE" /> <uses-permission android:name="android.permission.BLUETOOTH" android:maxSdkVersion="30" /> <uses-permission android:name="android.permission.BLUETOOTH_ADMIN" android:maxSdkVersion="30" /> <uses-permission-sdk-23 android:name="android.permission.ACCESS_COARSE_LOCATION" /> <uses-permission-sdk-23 android:name="android.permission.ACCESS_FINE_LOCATION" />
可能的原因及解决步骤
- 统一蓝牙地址大小写:Android 14对蓝牙地址的大小写校验更严格,建议将地址统一转为大写或小写后再传入,例如:
String validAddress = bluetoothAddress.toUpperCase(Locale.ROOT); BluetoothDevice device = bluetoothAdapter.getRemoteDevice(validAddress); - 校验地址格式合法性:确保地址是标准的
XX:XX:XX:XX:XX:XX格式,无多余空格、特殊字符,且每段都是两位十六进制字符。可以用正则表达式提前校验:if (!bluetoothAddress.matches("^([0-9A-Fa-f]{2}:){5}[0-9A-Fa-f]{2}$")) { // 处理非法地址格式 } - 检查扫描获取地址的逻辑:如果是通过BLE扫描获取的HM-10地址,确认扫描回调中返回的地址格式是否有变化,Android 14可能在扫描结果的地址返回上做了细微调整,避免直接使用未处理的原始地址。
- 排查
getRemoteDevice方法的异常处理:Android 14中BluetoothAdapter.getRemoteDevice()方法的参数校验逻辑可能增强,建议添加异常捕获,避免因格式问题直接崩溃:try { BluetoothDevice device = bluetoothAdapter.getRemoteDevice(bluetoothAddress); // 执行连接逻辑 } catch (IllegalArgumentException e) { // 处理地址无效的情况,比如提示用户或重新获取地址 }
虽然Android 14官方发布说明未明确提及该变更,但实际测试中发现系统对蓝牙地址的合法性校验强度有所提升,针对第三方BLE设备的地址处理需要更严谨。
内容的提问来源于stack exchange,提问作者Jeong
相关产品推荐
相关产品推荐

