如何跳转到权限设置页面
2024-11-07 15:10:25
466次阅读
0个评论
如何跳转到权限设置页面
今天开发者在群里问,如何跳转到权限设置页面,那么我们就来以麦克分权限为例,一起来看一下
当应用通过requestPermissionsFromUser()拉起弹框请求用户授权时,用户拒绝授权。应用将无法再次通过requestPermissionsFromUser拉起弹框,需要用户在系统应用“设置”的界面中,手动授予权限。
如下是第一次请求权限
第一次请求权限
首先配置moudle.json5
"requestPermissions": [
  {
    "name": "ohos.permission.MICROPHONE",
    "reason": "$string:PERMISSION_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(),直接拉起权限设置弹框,引导用户授予权限。
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://www.nutpi.net/ 來源:坚果派 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处
00
- 17回答
- 28粉丝
- 12关注
相关话题
- 【HarmonyOS NEXT】权限申请及应用设置页跳转
- 【HarmonyOS NEXT】权限申请及应用设置页跳转
- OpenHarmony: 如何通过路由跳转到一个只有页面没有UIAbility的模块
- OpenHarmony: 如何实现跨模块的页面跳转功能
- 鸿蒙Navigation处理启动页跳转到首页问题
- 开发者工具箱-跳转到应用市场
- 如何实现上下切换的页面间跳转动画
- 如何设置窗口旋转
- 【HarmonyOS NEXT】鸿蒙三方应用跳转到系统浏览器
- [HarmonyOS NEXT 实战案例:设置页面] 基础篇 - 垂直分割布局构建设置中心
- HarmonyOs开发:组件如何实现属性的动态设置
- bindsheet+键盘在页面跳转时的bug及处理思路
- OpenHarmony: 如何设置不保留最近任务列表中的快照
- 鸿蒙Navigation拦截器实现页面跳转登录鉴权方案
- [HarmonyOS NEXT 实战案例:设置页面] 进阶篇 - 交互功能与状态管理

