harmonyOS(麦克风权限)
- 前言
-
- [1. 配置路径](#1. 配置路径)
- [2. 权限申请](#2. 权限申请)
- [3. 授权检测](#3. 授权检测)
- [4. 调用](#4. 调用)
- [5. 真机效果](#5. 真机效果)
前言
app的开发中往往需要申请很多的权限来完成适配,麦克风的适配相比于网络和WiFi权限来说相对麻烦些,除了在module.json5配置权限外,平时工作会在element的string中统一名字的配置,具体路径如下所示
1. 配置路径

2. 权限申请
module.json5
dart
"requestPermissions":[
{
"name": "ohos.permission.MICROPHONE", //麦克风权限
"reason": "$string:apply_microphone", //string中设置的名字
"usedScene": {
"abilities": [
"EntryAbility"
],
"when": "inuse"
}
}
]
element => string
dart
{
"string": [
{
"name": "apply_microphone",
"value": "相机权限"
}
]
}
3. 授权检测
requestPermissionsFromUser会帮我们去检测授权状态,如果没授权过会唤起弹窗让用户选择,此授权代码借鉴于华为技术文档。
dart
import { abilityAccessCtrl, common, Permissions } from "@kit.AbilityKit";
import { BusinessError } from "@kit.BasicServicesKit";
export function permissionMicrophone(
context: common.UIAbilityContext,
permissionResult: (allow: boolean) => void
): void {
let atManager: abilityAccessCtrl.AtManager = abilityAccessCtrl.createAtManager();
let permissions: Array<Permissions> = ['ohos.permission.MICROPHONE'];
// requestPermissionsFromUser会判断权限的授权状态来决定是否唤起弹窗
atManager.requestPermissionsFromUser(context, permissions).then((data) => {
let Status: Array<number> = data.authResults;
let length: number = Status.length;
for (let i = 0; i < length; i++) {
if (Status[i] === 0) {
// 用户授权,可以继续访问目标操作
permissionResult(true);
console.debug("permissionLog:麦克风授权成功:用户授权");
} else {
// 用户拒绝授权,提示用户必须授权才能访问当前页面的功能,并引导用户到系统设置中打开相应的权限
permissionResult(false);
console.debug("permissionLog:麦克风授权失败:用户拒绝");
return;
}
}
// 授权成功
}).catch((err: BusinessError) => {
permissionResult(false);
console.error(`Failed to request permissions from user. Code is ${err.code}, message is ${err.message}`);
});
}
4. 调用
我这里是通过点击按钮调用的,只是测试功能连通性
dart
import { permissionMicrophone} from '../utils/PermissionMicrophome';
import { common } from '@kit.AbilityKit';
@Entry
@Component
struct Index {
//获取Ability上下文
private context = getContext(this) as common.UIAbilityContext;
build() {
RelativeContainer() {
Button('麦克风',{type:ButtonType.Capsule,stateEffect:true})
.alignRules({
center : {anchor:'__container__' , align : VerticalAlign.Center},
middle : {anchor:'__container__' , align : HorizontalAlign.Center}
})
.onClick(() => {
// 调用权限请求方法
permissionMicrophone(this.context, (allowed) => {
if (allowed) {
// 授权成功逻辑
console.log('权限已授予');
} else {
// 授权失败处理
console.log('权限被拒绝');
}
});
})
}
.height('100%')
.width('100%')
}
}
查询日志信息
5. 真机效果
