请问诸位大佬,这个蓝牙在HarmonyOS 鸿蒙Next下为什么一直没有成功启动啊?

发布于 1周前 作者 h691938207 来自 鸿蒙OS

请问诸位大佬,这个蓝牙在HarmonyOS 鸿蒙Next下为什么一直没有成功启动啊?

这是我运行起来之后点击运行如下函数的结果:

权限我也尝试开启了不知道有没有用:

5 回复

ACCESS.BLUETOOTH权限授权方式是user_grant,需要用户授权才可使用,atManager.requestPermissionsFromUser是用户授权的内容。你代码中有这部分内容,但是没有看到传入permissionList的定义,请检查下permissionList是否包含了ohos.permission.ACCESS_BLUETOOTH。

ACCESS_BLUETOOTH授权参考代码如下:

let atManager: abilityAccessCtrl.AtManager = abilityAccessCtrl.createAtManager();
try {
  let context = getContext(this);
  atManager.requestPermissionsFromUser(context, ['ohos.permission.ACCESS_BLUETOOTH'], (err: BusinessError, data: PermissionRequestResult)=>{
    console.info('data:' + JSON.stringify(data));
    console.info('data permissions:'+ data.permissions);
    console.info('data authResults:' + data.authResults);
  });
} catch(err) {
  console.log(catch err->${JSON.stringify(err)});
}

判断鉴权可能有问题,authResults结果为0才是已授权,其他都是未授权,并不是-1才是未授权,否则可能调用enableBluetooth报2900099错误,参考文档:https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V5/js-apis-permissionrequestresult-V5

可以参考下列代码试下:

import abilityAccessCtrl, { PermissionRequestResult, Permissions } from '@ohos.abilityAccessCtrl';
import access from '@ohos.bluetooth.access';
import { BusinessError } from '@ohos.base';
const permissions: Array<Permissions> = ['ohos.permission.ACCESS_BLUETOOTH'];
@Entry
@Component
struct Index {
  aboutToAppear(): void {
    this.reqPermissionsFromUser(permissions)
  }

  watch() {
  }

  reqPermissionsFromUser(permissions: Array<Permissions>): void {
    let context: Context = getContext(this) as Context;
    let atManager: abilityAccessCtrl.AtManager = abilityAccessCtrl.createAtManager();
    // requestPermissionsFromUser会判断权限的授权状态来决定是否唤起弹窗
    atManager.requestPermissionsFromUser(context, permissions).then((data: PermissionRequestResult) => {
      let grantStatus: Array<number> = data.authResults;
      let length: number = grantStatus.length;
      for (let i = 0; i < length; i++) {
        if (grantStatus[i] === 0) {
          // 用户授权,可以继续访问目标操作
        } else {
          // 用户拒绝授权,提示用户必须授权才能访问当前页面的功能,并引导用户到系统设置中打开相应的权限
          return;
        }
      }
    }).catch((err: BusinessError) => {
      console.error(`Failed to request permissions from user. Code is ${err.code}, message is ${err.message}`);
    })
  }

  build() {
    Row() {
      Column() {
        //在经典蓝牙开启和关闭的时候有设置判断条件吗?蓝牙这块的接口是不允许在开启的情况下调用enableBluetooth,关闭的时候调用disableBluetooth的,在开启和关闭请先做一下判断
        Button("打开蓝牙")
          .fontSize(20)
          .fontWeight(FontWeight.Bold)
          .onClick(() => {
            let state = access.getState() //检测蓝牙开启状态
            if (state == 0) {
              access.enableBluetooth(); //打开蓝牙
            }
          })
        Button("关闭蓝牙")
          .fontSize(20)
          .fontWeight(FontWeight.Bold)
          .onClick(async () => {
            let state = access.getState() //检测蓝牙开启状态
            if (state == 2) {
              await access.disableBluetooth()
            }
          })
      }.width('100%')
    }.height('100%')
  }
}

更多关于请问诸位大佬,这个蓝牙在HarmonyOS 鸿蒙Next下为什么一直没有成功启动啊?的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


十分感谢,

基本信息

这是要转换的内容。

  • 项目一
  • 项目二
  • 项目三

这是段落文字。

补充提问,我是虚拟机,我听同事说虚拟机的蓝牙貌似是有问题,不知真假。

cke_121.png

追加一下,这是我运行access.enableBluetooth();后编译器跳出的错误。

在HarmonyOS 鸿蒙Next系统下,蓝牙未能成功启动的问题可能源于多个方面。以下是一些可能的原因及排查方向:

  1. 系统权限问题:检查应用是否已获得使用蓝牙的必要权限。在HarmonyOS中,应用需要声明并使用相应的权限才能访问蓝牙功能。

  2. 蓝牙适配器状态:确认系统的蓝牙适配器是否处于开启状态。有时系统更新或设置更改可能导致蓝牙适配器被禁用。

  3. 驱动兼容性:检查蓝牙设备的驱动程序是否与HarmonyOS Next系统兼容。不兼容的驱动程序可能导致蓝牙功能无法正常工作。

  4. 系统bug或更新问题:系统本身的bug或未完成的更新可能导致蓝牙服务异常。检查是否有可用的系统更新,并尝试更新至最新版本。

  5. 硬件故障:虽然较少见,但硬件故障(如蓝牙模块损坏)也可能导致蓝牙无法启动。

针对上述问题,可以尝试重启设备、检查权限设置、更新系统或驱动程序等方法进行排查。如果以上方法均未能解决问题,则可能是更复杂的系统或硬件层面的问题。

如果问题依旧没法解决请联系官网客服,官网地址是 https://www.itying.com/category-93-b0.html 。在这里,你可以获得更专业的技术支持和解决方案。

回到顶部