Administrator
发布于 2024-07-11 / 9 阅读
0
0

android14问题

安卓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
         }             
    }
    

评论