HarmonyOS鸿蒙Next 4.0 基于API9 开发蓝牙扫描,执行 bluetoothManager.startBluetoothDiscovery()时;程序抛出异常,调用抛出异常: Error: Inner error,code返回码:-4.

HarmonyOS鸿蒙Next 4.0 基于API9 开发蓝牙扫描,执行 bluetoothManager.startBluetoothDiscovery()时;程序抛出异常,调用抛出异常: Error: Inner error,code返回码:-4. HarmonyOS4.0版本,基于API9 开发蓝牙扫描,相关蓝牙权限已经声明,但是执行

bluetoothManager.startBluetoothDiscovery()时;程序抛出异常,调用抛出异常: Error: Inner error,code返回码:-4。这是什么问题?
3 回复

蓝牙扫描异常(返回码-4)常见原因及解决方案

  • 原因1:权限未动态申请或配置不全 API 9及以上版本需要动态申请蓝牙权限( BLUETOOTH_SCAN 、 BLUETOOTH_CONNECT ),且需在 AndroidManifest.xml 中声明权限组。若未处理权限请求,系统会直接阻断扫描操作。
  • 原因2:扫描前未启用蓝牙适配器 需先通过 bluetoothManager.getAdapter() 获取适配器,检查 isEnabled() 状态。若蓝牙未开启,需调用`startActivityForResult(Intent(

更多关于HarmonyOS鸿蒙Next 4.0 基于API9 开发蓝牙扫描,执行 bluetoothManager.startBluetoothDiscovery()时;程序抛出异常,调用抛出异常: Error: Inner error,code返回码:-4.的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


该异常通常由蓝牙权限未正确配置或设备蓝牙状态异常导致。请检查以下配置:在module.json5中确认已声明ohos.permission.USE_BLUETOOTH和ohos.permission.LOCATION权限,并在应用首次启动时完成动态授权。同时确保设备蓝牙功能已开启且未处于配对/连接占用状态。返回码-4对应蓝牙服务内部错误,需排查系统蓝牙服务是否正常运行。

错误码-4通常表示权限问题或系统服务未就绪。针对HarmonyOS Next API 9的蓝牙扫描异常,请按以下步骤排查:

  1. 权限配置检查

    • module.json5中确认已声明蓝牙权限:
      "requestPermissions": [
        {
          "name": "ohos.permission.USE_BLUETOOTH",
          "reason": "用于蓝牙设备扫描"
        },
        {
          "name": "ohos.permission.LOCATION",
          "reason": "蓝牙扫描需要位置权限"
        }
      ]
      
    • 同时检查app.json5中是否同步声明权限。
  2. 动态权限申请

    • 在调用startBluetoothDiscovery()前,必须通过abilityAccessCtrl完成动态权限申请:
      import abilityAccessCtrl from '@ohos.abilityAccessCtrl';
      
      let atManager = abilityAccessCtrl.createAtManager();
      atManager.requestPermissionsFromUser(context, ['ohos.permission.USE_BLUETOOTH', 'ohos.permission.LOCATION'])
        .then((data) => {
          // 权限授予后执行扫描
          bluetoothManager.startBluetoothDiscovery();
        })
        .catch((err) => {
          console.error('权限申请失败:', err.code);
        });
      
  3. 蓝牙开关状态检测

    • 调用前检查蓝牙是否启用:
      if (!bluetoothManager.isBluetoothAvailable()) {
        // 提示用户开启蓝牙
        bluetoothManager.enableBluetooth();
      }
      
  4. 系统服务就绪状态

    • 确保在onWindowStageCreate生命周期后调用蓝牙API,避免服务未初始化完成。
  5. 错误码具体含义

    • 代码中可通过try-catch捕获详细错误信息:
      try {
        bluetoothManager.startBluetoothDiscovery();
      } catch (err) {
        console.error('蓝牙扫描失败:', JSON.stringify(err));
      }
      

建议优先检查动态权限申请流程,这是API 9版本最常见的触发原因。

回到顶部