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)}`)  
}

【尝试解决方案】:

  1. https://developer.huawei.com/consumer/cn/doc/harmonyos-references/js-apis-bluetooth-ble#blestartblescan

  2. 不带参数


更多关于HarmonyOS鸿蒙Next中蓝牙扫描无法启动报错401的实战教程也可以访问 https://www.itying.com/category-93-b0.html

3 回复

如果扫描的时候不想设置过滤参数的话,可以参考如下两种写法。

  • 方法一:
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(位置权限)

请检查以下配置:

  1. 在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"
    }
  }
]
  1. 确保在代码中动态申请位置权限:
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)}`);
}
  1. 确认设备蓝牙功能已开启,且系统设置中已授予应用位置和蓝牙权限。

权限配置完整后,蓝牙扫描应能正常启动。

回到顶部