• 发现问题:

有客户在使用我们另外一款蓝牙相关的App时,提示App下载后打开就循环闪退,根本进不了任何页面,客户反馈是遥遥领先的Mate60搭配了鸿蒙4.0,俺虽然没那么遥遥领先,但是也有一个4.0的设备测试,模拟用户的操作后,感觉客户恼火是肥肠正常的。

事故现场

  • 问题分析:

打开调试模式,发现报错如下:

大致意思应该是 开启REQUEST_ENABLE的Intent权限被拒绝,那么查看代码中哪里有用到REQUEST_ENABLE,发现是

if (!BleManager.getInstance().isBlueEnable){
    // 打开蓝牙
  startActivity(Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE))
}

可能有人看到上面代码会说,为何使用打开FastBle还使用原生写法打开蓝牙,在FastBle里也有一个方法

BleManager.getInstance().enableBluetooth()

因为我发现啊,我主力测试机一加手机调用此方法居然无效,不会打开手机蓝牙,所以就使用了原生打开蓝牙的方法。

这段代码是我在申请权限之前先判断了蓝牙是否打开,如果没有打开则打开手机蓝牙的逻辑,开发过程中使用到Android13均无这个问题出现,那么怀疑是鸿蒙4.0蓝牙部分有差异性了。

  • 问题解决:

既然找到问题了,就修改代码顺序,先获取蓝牙相关的进行时权限,如SCAN,ADMIN,ADVERTISE,CONNECT,LOCATION等(根据情况来选择),而后在初次使用蓝牙扫描的代码中判断是否打开手机蓝牙,若没有则打开的逻辑即可解决。