HarmonyOS鸿蒙Next中蓝牙扫描无法启动报错401
HarmonyOS鸿蒙Next中蓝牙扫描无法启动报错401 【问题描述】:BLE蓝牙无法启动扫描,直接返回401报错
【问题现象】:startBtScan with exception : {“code”:“401”}
【版本信息】:
API:20
测试手机:Mate60 HarmonyOS 6.0.0 SP8
DevEco Studio 6.0.0 Release
构建版本:6.0.0.858, built on September 24, 2025
Runtime version: 21.0.6+8-b631.39 aarch64 (JCEF 122.1.9)
VM: OpenJDK 64-Bit Server VM by JetBrains s.r.o.
Toolkit: sun.lwawt.macosx.LWCToolkit
macOS 26.1
GC: G1 Young Generation, G1 Concurrent GC, G1 Old Generation
Memory: 8000M
Cores: 10
Registry:
ds.ide.experimental.ui=true
idea.plugins.compatible.build=IC-243.24978.46
【复现代码】:
private bleScanner: ble.BleScanner = ble.createBleScanner();
try {
// this.bleScanner = ble.createBleScanner();
// 构造扫描BLE广播的过滤条件,目标BLE广播报文需符合该过滤条件
let manufactureId = 4567;
let manufactureData: Uint8Array = new Uint8Array([1, 2, 3, 4]);
let manufactureDataMask: Uint8Array = new Uint8Array([0xFF, 0xFF, 0xFF, 0xFF]);
let deviceName: string = "wl_ble_"
// 根据业务实际情况定义过滤器
// let scanFilter: ble.ScanFilter = {
// manufactureId: manufactureId,
// manufactureData: manufactureData.buffer,
// manufactureDataMask: manufactureDataMask.buffer,
// // name:deviceName
// };
let scanFilter: ble.ScanFilter = {
deviceId:"XX:XX:XX:XX:XX:XX",
name:"test",
serviceUuid:"00001888-0000-1000-8000-00805f9b34fb"
};
// 构造扫描配置参数
let scanOptions: ble.ScanOptions = {
interval: 0,
dutyMode: ble.ScanDuty.SCAN_MODE_BALANCED,
matchMode: ble.MatchMode.MATCH_MODE_AGGRESSIVE
}
this.bleScanner.on('BLEDeviceFind', this.onReceiveBtEvent)
futureLogger.debug(`should print this if everything is ok`)
this.bleScanner.startScan([]).catch((err:BusinessError)=>{
futureLogger.error(`startScan with promise error : ${JSON.stringify(err)}`)
});
} catch (err) {
futureLogger.error(`startBtScan with exception : ${JSON.stringify(err)}`)
}
【尝试解决方案】:
更多关于HarmonyOS鸿蒙Next中蓝牙扫描无法启动报错401的实战教程也可以访问 https://www.itying.com/category-93-b0.html
如果扫描的时候不想设置过滤参数的话,可以参考如下两种写法。
- 方法一:
let scanFilter: ble.ScanFilter = {
// manufactureId: manufactureId, // manufactureData: manufactureData.buffer, // manufactureDataMask: manufactureDataMask.buffer, // // name:deviceName // }; let scanFilter: ble.ScanFilter = {
// deviceId:"XX:XX:XX:XX:XX:XX",
// name: 'Pura 70',
// serviceUuid:"00001888-0000-1000-8000-00805f9b34fb"
};
// 构造扫描配置参数
let scanOptions: ble.ScanOptions = {
interval: 0,
dutyMode: ble.ScanDuty.SCAN_MODE_BALANCED,
matchMode: ble.MatchMode.MATCH_MODE_AGGRESSIVE
};
this.bleScanner.on('BLEDeviceFind', this.onReceiveEvent);
console.debug(`should print this if everything is ok`);
this.bleScanner.startScan([scanFilter]).catch((err: BusinessError) => {
console.error(`startScan with promise error : ${JSON.stringify(err)}`);
});
} catch (err) {
console.error(`startBtScan with exception : ${JSON.stringify(err)}`);
}
- 方法二:
this.bleScanner.on('BLEDeviceFind', this.onReceiveEvent);
console.debug(`should print this if everything is ok`);
this.bleScanner.startScan(null).catch((err: BusinessError) => {
console.error(`startScan with promise error : ${JSON.stringify(err)}`);
});
更多关于HarmonyOS鸿蒙Next中蓝牙扫描无法启动报错401的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
在HarmonyOS Next中,蓝牙扫描报错401通常表示权限问题。请检查应用是否已获取ohos.permission.USE_BLUETOOTH和ohos.permission.LOCATION权限。在module.json5文件中正确声明权限,并在应用首次运行时动态申请。确保设备蓝牙功能已开启,且系统位置服务处于可用状态。权限配置错误或用户未授权会导致扫描失败。
错误代码401表示权限缺失。在HarmonyOS Next中,蓝牙扫描需要以下权限:
- ohos.permission.ACCESS_BLUETOOTH_DEVICE(普通蓝牙权限)
- ohos.permission.LOCATION(位置权限)
请检查以下配置:
- 在module.json5配置文件中添加权限声明:
"requestPermissions": [
{
"name": "ohos.permission.ACCESS_BLUETOOTH_DEVICE",
"reason": "$string:bluetooth_permission_reason",
"usedScene": {
"abilities": ["EntryAbility"],
"when": "always"
}
},
{
"name": "ohos.permission.LOCATION",
"reason": "$string:location_permission_reason",
"usedScene": {
"abilities": ["EntryAbility"],
"when": "always"
}
}
]
- 确保在代码中动态申请位置权限:
import abilityAccessCtrl from '@ohos.abilityAccessCtrl';
// 检查并申请位置权限
let atManager = abilityAccessCtrl.createAtManager();
try {
atManager.requestPermissionsFromUser(getContext(this), ['ohos.permission.LOCATION']).then((data) => {
// 权限申请回调处理
});
} catch (err) {
console.error(`Request permission failed: ${JSON.stringify(err)}`);
}
- 确认设备蓝牙功能已开启,且系统设置中已授予应用位置和蓝牙权限。
权限配置完整后,蓝牙扫描应能正常启动。

