• 发现问题

公司的蓝牙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
       }             
 }