uni-app uts调用鸿蒙低功耗蓝牙扫描APP闪退
uni-app uts调用鸿蒙低功耗蓝牙扫描APP闪退
开发环境 | 版本号 | 项目创建方式 |
---|---|---|
Windows | win10 | HBuilderX |
产品分类:uniapp/App
PC开发环境操作系统:Windows
HBuilderX类型:Alpha
HBuilderX版本号:4.36
手机系统:HarmonyOS NEXT
手机系统版本号:HarmonyOS NEXT Developer Beta1
手机厂商:华为
手机机型:Mate 60
页面类型:vue
vue版本:vue3
打包方式:离线
示例代码:
import { OnBluetoothDeviceFoundOptions, OnBluetoothDeviceFoundCallback } from ‘…/…/interface.uts’
import { DevicesOptions } from ‘…/type.uts’
import { ble } from ‘@kit.ConnectivityKit’; import { AsyncCallback, BusinessError } from ‘@kit.BasicServicesKit’;
export function onBluetoothDeviceFound(options : OnBluetoothDeviceFoundCallback,name ?:string) { let isSuccess = true; console.log(JSON.stringify(options),name) try {
let devicesData : Array<DevicesOptions> = [];
ble.on("BLEDeviceFind", (data: Array<ble.ScanResult>)=>{
// console.info(JSON.stringify(data))
for(let i = 0; i < data.length; i++){
let obj : DevicesOptions = {
deviceId: data[i].deviceId,
RSSI: data[i].rssi,
name: data[i].deviceName
}
devicesData.push(obj)
}
let res : OnBluetoothDeviceFoundOptions = {
devices: devicesData
};
options?.(res);
});
let scanOptions: ble.ScanOptions = {
interval: 500,
dutyMode: ble.ScanDuty.SCAN_MODE_LOW_LATENCY,
matchMode: ble.MatchMode.MATCH_MODE_AGGRESSIVE
}
ble.startBLEScan(name ? [{name: name}] as ble.ScanFilter[] : null,scanOptions);
} catch (err) { isSuccess = false; console.error('errCode: ’ + (err as BusinessError).code + ', errMessage: ’ + (err as BusinessError).message); } }
操作步骤:
let scanOptions: ble.ScanOptions = {
interval: 500,
dutyMode: ble.ScanDuty.SCAN_MODE_LOW_LATENCY,
matchMode: ble.MatchMode.MATCH_MODE_AGGRESSIVE
}
预期结果:
正常扫描APP不会崩溃
实际结果:
正常扫描APP崩溃
bug描述:
鸿蒙低功耗蓝牙搜索,会导致APP崩溃退出 设置 ScanOptions 扫描的配置参数, 低功耗模式 3分钟左右会退; 均衡模式 1分10秒左右会退; 低延迟模式 20 秒
更多关于uni-app uts调用鸿蒙低功耗蓝牙扫描APP闪退的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
更多关于uni-app uts调用鸿蒙低功耗蓝牙扫描APP闪退的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
针对您提到的uni-app在调用鸿蒙低功耗蓝牙扫描时出现APP闪退的问题,这通常涉及到跨平台兼容性和底层API调用的稳定性。以下是一个简化的代码案例,展示了如何在uni-app中尝试调用鸿蒙的低功耗蓝牙扫描功能,并包含了一些基本的错误处理机制,以预防APP闪退。需要注意的是,uni-app本身并不直接支持鸿蒙的API,因此可能需要借助一些插件或原生代码桥接。
步骤1:配置原生插件
首先,确保你已经在uni-app项目中配置了支持鸿蒙的原生插件。这通常涉及在manifest.json
中添加原生模块配置,并编写相应的原生代码。
步骤2:编写原生代码(以鸿蒙为例)
在鸿蒙原生模块中,编写低功耗蓝牙扫描的代码:
// 鸿蒙原生模块代码示例
import ohos.bluetooth.le.ScanCallback;
import ohos.bluetooth.le.ScanFilter;
import ohos.bluetooth.le.ScanResult;
import ohos.bluetooth.le.ScanSettings;
import ohos.bluetooth.BluetoothAdapter;
public class BleScanner {
public void startScan() {
BluetoothAdapter adapter = BluetoothAdapter.getDefaultAdapter();
if (adapter != null && adapter.isEnabled()) {
ScanSettings settings = new ScanSettings.Builder().build();
ScanFilter filter = new ScanFilter.Builder().build();
adapter.getBluetoothLeScanner().startScan(new ScanCallback() {
@Override
public void onScanResult(int callbackType, ScanResult result) {
// 处理扫描结果
}
@Override
public void onBatchScanResults(List<ScanResult> results) {
// 批量处理扫描结果
}
@Override
public void onScanFailed(int errorCode) {
// 处理扫描失败
}
}, settings, filter);
} else {
// 处理蓝牙未开启或不可用的情况
}
}
}
步骤3:在uni-app中调用原生模块
在uni-app的JavaScript代码中,通过plus.runtime.exec
或相应的插件接口调用原生模块:
// uni-app中的JavaScript代码示例
try {
plus.runtime.exec('BleScanner', 'startScan', [], function(e) {
console.log('扫描开始');
}, function(e) {
console.error('调用失败:', e.message);
});
} catch (error) {
console.error('捕获到异常:', error);
}
注意事项
- 确保鸿蒙设备上已开启蓝牙权限。
- 在原生代码中添加充分的错误处理和日志记录,以便定位问题。
- 考虑到不同设备的兼容性,可能需要针对特定设备进行额外的适配。
- 如果APP仍然闪退,建议使用鸿蒙的开发者工具进行调试,查看具体的崩溃日志,以便进一步分析问题。