harmonyOS(麦克风权限)
- 前言
- 1. 配置路径
- 2. 权限申请
- 3. 授权检测
- 4. 调用
- 5. 真机效果
前言
app的开发中往往需要申请很多的权限来完成适配,麦克风的适配相比于网络和WiFi权限来说相对麻烦些,除了在module.json5配置权限外,平时工作会在element的string中统一名字的配置,具体路径如下所示
1. 配置路径
2. 权限申请
module.json5
"requestPermissions":[{"name": "ohos.permission.MICROPHONE", //麦克风权限"reason": "$string:apply_microphone", //string中设置的名字"usedScene": {"abilities": ["EntryAbility"],"when": "inuse"}}]
element => string
{"string": [{"name": "apply_microphone","value": "相机权限"}]
}
3. 授权检测
requestPermissionsFromUser会帮我们去检测授权状态,如果没授权过会唤起弹窗让用户选择,此授权代码借鉴于华为技术文档。
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. 调用
我这里是通过点击按钮调用的,只是测试功能连通性
import { permissionMicrophone} from '../utils/PermissionMicrophome';
import { common } from '@kit.AbilityKit';
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%')}
}
查询日志信息