安卓14原生系统BLE蓝牙自动断开问题
发现问题
公司的蓝牙App有客户反馈使用过程中会频繁断连,手机型号是
可以看到都是Android14,虽然国产的Android14手机测试了没问题,但是暂且锅就丢给Android14吧.
原因分析
项目中的蓝牙框架使用的是github上评价比较好的
implementation 'com.github.Jasonchenlijian:FastBle:2.4.0'
打印日志的时候发现Android13以下的国产手机Phy如下:
而有问题的谷歌手机如下:
查看属性解释如下:
解决方案
知道以上的不同之后尝试修改,更改后断连情况基本消失,但偶尔还是会发生一次,算是解决了问题吧(至少能用了)。
代码如下,在蓝牙连接成功的回调中加入设置phy的代码
@Override public void onConnectSuccess(BleDevice bleDevice, BluetoothGatt gatt, int status) { // 解决Android14在国外某些手机自动断开的问题 if (gatt != null && Build.VERSION.SDK_INT > Build.VERSION_CODES.TIRAMISU) { int txPhy = BluetoothDevice.PHY_LE_CODED; // 设置传输 PHY 类型(3 Mbps) int rxPhy = BluetoothDevice.PHY_LE_CODED; // 设置接收 PHY 类型(3 Mbps) gatt.setPreferredPhy( txPhy, rxPhy, BluetoothDevice.PHY_OPTION_NO_PREFERRED );// 设置首选 PHY } }