HarmonyOS 调用蓝牙enableBluetooth api 报2900099错误

操作步骤:

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

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

HarmonyOS
2024-12-26 07:11:29
3175浏览
收藏 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)});
}
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.

判断鉴权可能有问题,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%')
  }
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36.
  • 37.
  • 38.
  • 39.
  • 40.
  • 41.
  • 42.
  • 43.
  • 44.
  • 45.
  • 46.
  • 47.
  • 48.
  • 49.
  • 50.
  • 51.
  • 52.
  • 53.
  • 54.
  • 55.
分享
微博
QQ
微信
回复
2024-12-26 10:49:12


相关问题
HarmonyOS 蓝牙ble写入失败 2900099
592浏览 • 1回复 待解决
HarmonyOS 蓝牙API咨询
972浏览 • 2回复 待解决
HarmonyOS 蓝牙api问题
659浏览 • 1回复 待解决
HarmonyOS 推送服务系统错误1000900010
433浏览 • 1回复 待解决
推送服务系统错误1000900010
2159浏览 • 1回复 待解决
HarmonyOS 加载图片跨域错误
186浏览 • 1回复 待解决
HarmonyOS 本地调用蓝牙问题
595浏览 • 1回复 待解决
webapp如何调用蓝牙
2485浏览 • 1回复 待解决
HarmonyOS 证书链校验器19030001错误
496浏览 • 1回复 待解决
HarmonyOS 有无开关蓝牙api接口?
501浏览 • 1回复 待解决
HarmonyOS 蓝牙API startBLEScan有变化吗?
571浏览 • 1回复 待解决
提问
该提问已有2人参与 ,帮助了54人