目录

应用使用蓝牙功能时闪退

问题现象

使用蓝牙添加其他设备时,关闭蓝牙并退出页面,应用闪退。

背景知识

问题定位

  1. 从faultlogger目录下获取到应用的JsCrash故障日志,故障原因是Error,故障信息为BusinessError 2900003: Bluetooth disabled,蓝牙开关已关闭。
    Error name:Error
    Error message:BusinessError 2900003: Bluetooth disabled.
    Error code:2900003
    Stacktrace:
    Cannot get SourceMap info, dump raw stack:
    at closeScan (default|@ohos/common|1.0.0|src/main/ets/bluetooth/Scan.ts:40:40)
    at aboutToDisappear (default|device|1.0.0|src/main/ets/components/BTScan.ts:62:62)
  2. 从堆栈中看出,在退出界面时,应用调用了closeScan函数,执行了关闭蓝牙扫描操作。对于停止蓝牙扫描接口,例如ble.stopBLEScan,如果在蓝牙已关闭的情况下调用,就会出现Bluetooth disabled异常。

分析结论

应用在蓝牙已关闭的情况下,调用了停止蓝牙扫描的接口,导致上报了JsCrash故障并闪退。

修改建议

因为用户在扫描过程中关闭了蓝牙,扫描已经终止,所以只需使用try-catch捕获停止扫描接口抛出的蓝牙未开启异常即可。

推荐使用API version 15开始支持的多路扫描方式,详情参考低功耗蓝牙。