当前位置: 首页 > article >正文

鸿蒙 申请权限

1, 先看效果

2, 现在 module.json5中配置 黄色的一定要配置  要不会报申请权限的错误

 

3, 在 EntryAbility 配置

 

 直接cv代码

// 使用UIExtensionAbility:将import { UIAbility } from '@kit.AbilityKit' 替换为import { UIExtensionAbility } from '@kit.AbilityKit';
import { abilityAccessCtrl, common, Permissions, UIAbility } from '@kit.AbilityKit';
import { window } from '@kit.ArkUI';
import { BusinessError } from '@kit.BasicServicesKit';

const permissions: Array<Permissions> = ['ohos.permission.MICROPHONE'];
// 使用UIExtensionAbility:将common.UIAbilityContext 替换为common.UIExtensionContext
function reqPermissionsFromUser(permissions: Array<Permissions>, context: common.UIAbilityContext): void {
  let atManager: abilityAccessCtrl.AtManager = abilityAccessCtrl.createAtManager();
  // requestPermissionsFromUser会判断权限的授权状态来决定是否唤起弹窗
  atManager.requestPermissionsFromUser(context, permissions).then((data) => {
    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}`);
  })
}
// 使用UIExtensionAbility:将 UIAbility 替换为UIExtensionAbility
export default class EntryAbility extends UIAbility {
  onWindowStageCreate(windowStage: window.WindowStage): void {
    // ...
    windowStage.loadContent('pages/Index', (err, data) => {
      reqPermissionsFromUser(permissions, this.context);
    // ...
    });
  }

  // ...
}

4, 所使用的页面进行配置

 

import { abilityAccessCtrl, common, Permissions } from '@kit.AbilityKit';
import { BusinessError } from '@kit.BasicServicesKit';

const permissions: Array<Permissions> = ['ohos.permission.MICROPHONE'];

// 使用UIExtensionAbility:将common.UIAbilityContext 替换为common.UIExtensionContext
function reqPermissionsFromUser(permissions: Array<Permissions>, context: common.UIAbilityContext): void {
  let atManager: abilityAccessCtrl.AtManager = abilityAccessCtrl.createAtManager();
  // requestPermissionsFromUser会判断权限的授权状态来决定是否唤起弹窗
  atManager.requestPermissionsFromUser(context, permissions).then((data) => {
    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}`);
  })
}

@Entry
@Component
struct Index {
  aboutToAppear() {
    // 使用UIExtensionAbility:将common.UIAbilityContext 替换为common.UIExtensionContext
    const context: common.UIAbilityContext = getContext(this) as common.UIAbilityContext;
    reqPermissionsFromUser(permissions, context);
  }

  build() {
    // ...
    Column() {
      Text('申请麦克风权限')

    }
    .width('100%')
    .height('100%')
    .justifyContent(FlexAlign.Center)
  }
}

 5, 添加一个字段可以修改弹窗按钮上面的内容

6, 也可以参考华为官方的权限相关配置

 icon-default.png?t=N7T8https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/request-user-authorization-V5


http://www.kler.cn/a/286840.html

相关文章:

  • 基于JAVA的微信点餐小程序设计与实现(LW+源码+讲解)
  • rocketmq基本架构
  • vue3+elementPlus之后台管理系统(从0到1)(day3-管理员管理)
  • 【Tool】沉浸式翻译 DeepLX
  • 1. 基于图像的三维重建
  • OSPF协议部分解读
  • spring boot(学习笔记第十九课)
  • 从理论层面设计简单的电池管理系统(BMS)
  • CAN总线简介
  • LuaJIT源码分析(四)table
  • 【Rust光年纪】探索Rust中的物理引擎库:功能、安装与API概览
  • Django国际化和本地化
  • 【案例】如何做B端竞品分析?
  • SpringBoot Bean初始化顺序
  • sort与sorted区别用法
  • 大数据学习路线基础指南‌
  • SprinBoot+Vue学生选课微信小程序的设计与实现
  • 基于Android Studio 实现通讯录—原创
  • 相机掉帧采集速度慢怎么办巨型帧9014
  • STM32-PWM驱动呼吸灯——HAL库
  • 详解JavaScript
  • springboot配置两个MongoDB
  • 手搓 Java hashmap
  • vscode解决运行程序无法从控制台输入问题
  • Unity(2022.3.41LTS) - 视频
  • 深度解读并发安全集合的原理及源码