本文原创发布在华为开发者社区

介绍

本示例基于程序访问控制管理实现二次向用户申请相机访问权限授权。

实现相机权限二次申请源码链接

效果预览

请添加链接描述

使用说明

点击“Request Permission”按钮,出现弹窗向用户申请相机访问权限授权,点击“不允许”,再次点击“Request Permission”按钮,出现半屏弹窗二次向用户申请授权。

实现思路

点击“Request Permission”按钮时,通过requestPermissionsFromUser拉起弹框请求用户授权,若用户同意授权,再次点击“Request Permission”按钮不会拉起授权弹框。若用户拒绝授权,再次点击“Request Permission”按钮时,调用requestPermissionOnSetting接口,二次拉起权限设置弹框,引导用户授予权限。核心代码如下,源码参考Index.ets。

Button('Request Permission')
          .onClick(() => {
            let atManager: abilityAccessCtrl.AtManager = abilityAccessCtrl.createAtManager();
            let context: Context = getContext(this) as common.UIAbilityContext;
            atManager.requestPermissionsFromUser(context, ['ohos.permission.CAMERA'])
              .then((data: PermissionRequestResult) => {
                hilog.info(0x0000, 'testTag', 'data:' + JSON.stringify(data));
                hilog.info(0x0000, 'testTag', 'data permissions:' + data.permissions);
                hilog.info(0x0000, 'testTag', 'data authResults:' + data.authResults);
                hilog.info(0x0000, 'testTag', 'data dialogShownResults:' + data.dialogShownResults);
                if (data.authResults[0] === -1 && !this.firstTime) {
                  atManager.requestPermissionOnSetting(context, ['ohos.permission.CAMERA'])
                    .then((data: Array<abilityAccessCtrl.GrantStatus>) => {
                      hilog.info(0x0000, 'testTag', 'data:' + JSON.stringify(data));
                    })
                    .catch((err: BusinessError) => {
                      hilog.error(0x0000, 'testTag', 'data:' + JSON.stringify(err));
                    });
                }
                this.firstTime = false;
              })
              .catch((err: BusinessError) => {
                hilog.error(0x0000, 'testTag', 'data:' + JSON.stringify(err));
              });
          })

鸿蒙场景化代码
1 声望0 粉丝