HarmonyOS 调用蓝牙enableBluetooth api 报2900099错误

操作步骤:

1、蓝牙权限已申请且授权

2、调用 access.enableBluetooth(); 报 2900099 Operation failed.

HarmonyOS
2024-12-26 07:11:29
浏览
收藏 0
回答 1
待解决
回答 1
按赞同
/
按时间
zbw_apple

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才是未授权。参考文档: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%')
  }
分享
微博
QQ
微信
回复
2024-12-26 10:49:12
相关问题
HarmonyOS 蓝牙ble写入失败 2900099
284浏览 • 1回复 待解决
HarmonyOS 蓝牙api问题
309浏览 • 1回复 待解决
HarmonyOS 蓝牙API咨询
724浏览 • 2回复 待解决
HarmonyOS 推送服务系统错误1000900010
242浏览 • 1回复 待解决
HarmonyOS 加载图片跨域错误
56浏览 • 1回复 待解决
webapp如何调用蓝牙
2303浏览 • 1回复 待解决
推送服务系统错误1000900010
1963浏览 • 1回复 待解决
HarmonyOS 本地调用蓝牙问题
278浏览 • 1回复 待解决
HarmonyOS 证书链校验器19030001错误
214浏览 • 1回复 待解决
HarmonyOS 模拟器位置服务 3301300错误
302浏览 • 1回复 待解决
HarmonyOS 旧版API提示错误
160浏览 • 1回复 待解决
提问
该提问已有0人参与 ,帮助了0人