OpenHarmony开发者论坛

标题: 如何跳转到权限设置页面 [打印本页]

作者: 润开鸿_坚果    时间: 2024-11-7 15:08
标题: 如何跳转到权限设置页面
[md]## 如何跳转到权限设置页面

**今天开发者在群里问,如何跳转到权限设置页面,那么我们就来以麦克分权限为例,一起来看一下**

**当应用通过**[requestPermissionsFromUser()](https://developer.huawei.com/con ... ermissionsfromuser9)拉起弹框[请求用户授权](https://developer.huawei.com/con ... er-authorization-V5)时,用户拒绝授权。应用将无法再次通过requestPermissionsFromUser拉起弹框,需要用户在系统应用“设置”的界面中,手动授予权限。

**如下是第一次请求权限**

## 第一次请求权限

**首先配置moudle.json5**

```
"requestPermissions": [
  {
   "name": "ohos.permission.MICROPHONE",
   "reason": "$stringERMISSION_MICROPHONE",
   "usedScene": {
     "abilities": [
       "EntryAbility"
     ],
     "when": "inuse"
   },
  }
],
```

**接下来就是代码中申请。**

```
import isLeapYear from "@nutpi/leap-year"
import { abilityAccessCtrl, PermissionRequestResult, common } from '@kit.AbilityKit';
import { BusinessError } from '@kit.BasicServicesKit';


@Entry
@Component
struct Index {
 @State flag: boolean = true;

 build() {
   Row() {
     Column() {
       Button("拒绝申请权限").onClick(() => {


         let atManager: abilityAccessCtrl.AtManager = abilityAccessCtrl.createAtManager();
         let context: Context = getContext(this) as common.UIAbilityContext;
         atManager.requestPermissionsFromUser(context, ['ohos.permission.MICROPHONE'],
           (err: BusinessError, data: PermissionRequestResult) => {
             if (err) {
               console.error(`requestPermissionsFromUser fail, err->${JSON.stringify(err)}`);
             } else {
               console.info('data:' + JSON.stringify(data));
               console.info('data permissions:' + data.permissions);
               console.info('data authResults:' + data.authResults);
               console.info('data dialogShownResults:' + data.dialogShownResults);
             }
           });
       })


     }
     .width('100%')
   }
   .height('100%')
  }
}
```

## 第二次申请

**当点击拒绝以后就可以使用如下代码,在“设置”应用中的路径:**

* **路径一:设置 > 隐私与安全 > 权限类型(如麦克风) > 具体应用**
* **路径二:设置 > 应用和元服务 > 某个应用**

**应用也可以通过调用**[requestPermissionOnSetting()](https://developer.huawei.com/con ... rmissiononsetting12),直接拉起权限设置弹框,引导用户授予权限。

```
import isLeapYear from "@nutpi/leap-year"
import { abilityAccessCtrl, PermissionRequestResult, common } from '@kit.AbilityKit';
import { BusinessError } from '@kit.BasicServicesKit';


@Entry
@Component
struct Index {
 @State flag: boolean = true;

 build() {
   Row() {
     Column() {


       Button("被拒绝后申请麦克风权限").onClick(() => {


         let atManager: abilityAccessCtrl.AtManager = abilityAccessCtrl.createAtManager();
         let context: Context = getContext(this) as common.UIAbilityContext;
         atManager.requestPermissionOnSetting(context, ['ohos.permission.MICROPHONE'])
           .then((data: Array<abilityAccessCtrl.GrantStatus>) => {
             console.info('data:' + JSON.stringify(data));
           })
           .catch((err: BusinessError) => {
             console.error('data:' + JSON.stringify(err));
           });
       })

       Text(this.flag ? "坚果" : "坚果派")
         .fontSize(50)
         .fontWeight(FontWeight.Bold).onClick(() => {

         this.flag = isLeapYear(2014);


       })
     }
     .width('100%')
   }
   .height('100%')
  }
}
```

## 完整代码

```
import isLeapYear from "@nutpi/leap-year"
import { abilityAccessCtrl, PermissionRequestResult, common } from '@kit.AbilityKit';
import { BusinessError } from '@kit.BasicServicesKit';


@Entry
@Component
struct Index {
 @State flag: boolean = true;

 build() {
   Row() {
     Column() {
       Button("拒绝申请权限").onClick(() => {


         let atManager: abilityAccessCtrl.AtManager = abilityAccessCtrl.createAtManager();
         let context: Context = getContext(this) as common.UIAbilityContext;
         atManager.requestPermissionsFromUser(context, ['ohos.permission.MICROPHONE'],
           (err: BusinessError, data: PermissionRequestResult) => {
             if (err) {
               console.error(`requestPermissionsFromUser fail, err->${JSON.stringify(err)}`);
             } else {
               console.info('data:' + JSON.stringify(data));
               console.info('data permissions:' + data.permissions);
               console.info('data authResults:' + data.authResults);
               console.info('data dialogShownResults:' + data.dialogShownResults);
             }
           });
       })

       Button("被拒绝后申请麦克风权限").onClick(() => {


         let atManager: abilityAccessCtrl.AtManager = abilityAccessCtrl.createAtManager();
         let context: Context = getContext(this) as common.UIAbilityContext;
         atManager.requestPermissionOnSetting(context, ['ohos.permission.MICROPHONE'])
           .then((data: Array<abilityAccessCtrl.GrantStatus>) => {
             console.info('data:' + JSON.stringify(data));
           })
           .catch((err: BusinessError) => {
             console.error('data:' + JSON.stringify(err));
           });
       })

       Text(this.flag ? "坚果" : "坚果派")
         .fontSize(50)
         .fontWeight(FontWeight.Bold).onClick(() => {

         this.flag = isLeapYear(2014);


       })
     }
     .width('100%')
   }
   .height('100%')
  }
}
```

## 参考

[https://developer.huawei.com/con ... ermissionsfromuser9](https://developer.huawei.com/con ... ermissionsfromuser9)

[https://developer.huawei.com/con ... orization-second-V5](https://developer.huawei.com/con ... orization-second-V5)
[/md]




欢迎光临 OpenHarmony开发者论坛 (https://forums.openharmony.cn/) Powered by Discuz! X3.5