安卓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
}
}
本作品采用 知识共享署名-相同方式共享 4.0 国际许可协议 进行许可。