HarmonyOS 鸿蒙Next 如何在我的应用中打开系统设置页面授予应用权限

发布于 1周前 作者 htzhanglong 来自 鸿蒙OS

HarmonyOS 鸿蒙Next 如何在我的应用中打开系统设置页面授予应用权限 请问如何在我的应用中打开系统设置页面授予应用权限,像安卓那样,以便在用户未授予权限时还可以继续引导用户给予权限,权限申请?

3 回复
文档参考:[华为开发者联盟](https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V2/accesstoken-guidelines-0000001493744016-V2#ZH-CN_TOPIC_0000001574088333__%E9%85%8D%E7%BD%AE%E6%96%87%E4%BB%B6%E6%9D%83%E9%99%90%E5%A3%B0%E6%98%8E)

//Index

```javascript
import { abilityAccessCtrl, common, Permissions, Want } from '[@kit](/user/kit).AbilityKit';
import { BusinessError } from '[@kit](/user/kit).BasicServicesKit';

const permissions: Array<Permissions> = ["ohos.permission.ACTIVITY_MOTION","ohos.permission.CAMERA"];
function reqPermissionsFromUser(permissions: Array<Permissions>, context: common.UIAbilityContext): void {
  let atManager: abilityAccessCtrl.AtManager = abilityAccessCtrl.createAtManager();
  atManager.requestPermissionsFromUser(context, permissions).then((data) => {
    let grantStatus: Array<number> = data.authResults;
    let length: number = grantStatus.length;
    for (let i = 0; i < length; i++) {
      if (grantStatus[i] === 0) {
        // 用户授权,可以继续访问目标操作
      } else {
        // 用户拒绝授权,提示用户必须授权才能访问当前页面的功能,并引导用户到系统设置中打开相应的权限
        openPermissionsInSystemSettings(context)
        return;
      }
    }
    // 授权成功
  }).catch((err: BusinessError) => {
    console.error(`Failed to request permissions from user. Code is ${err.code}, message is ${err.message}`);
  })
}

function openPermissionsInSystemSettings(context: common.UIAbilityContext): void {
  let wantInfo: Want = {
    bundleName: 'com.huawei.hmos.settings',
    abilityName: 'com.huawei.hmos.settings.MainAbility',
    uri: 'application_info_entry',
    parameters: {
      settingsParamBundleName: 'com.example.perssions'
    }
  }
  context.startAbility(wantInfo).then(() => {
  }).catch((error: Error) => {
  })
}

[@Entry](/user/Entry)
[@Component](/user/Component)
struct Index {
  [@State](/user/State) message: string = 'Hello World';

  aboutToAppear() {
    const context: common.UIAbilityContext = getContext(this) as common.UIAbilityContext;
    reqPermissionsFromUser(permissions, context);
  }

  build() {
    Row() {
      Column() {
        Text(this.message)
          .fontSize(50)
          .fontWeight(FontWeight.Bold)
      }
      .width('100%')
    }
    .height('100%')
  }
}
"requestPermissions":[
{
  "name" : "ohos.permission.ACTIVITY_MOTION",
  "reason": "$string:EntryAbility_label",
  "usedScene": {
    "abilities": [
      "EntryAbility"
    ],
  "when":"inuse"
  }
},
{
  "name" : "ohos.permission.CAMERA",
  "reason": "$string:EntryAbility_desc",
  "usedScene": {
    "abilities": [
      "EntryAbility"
    ],
    "when":"inuse"
  }
},
]
import { common } from '[@kit](/user/kit).AbilityKit';

[@Entry](/user/Entry)
[@Component](/user/Component)
struct Index3 {
  [@State](/user/State) message: string = 'Hello World';
  build() {
    Row() {
      Column() {
        Text(this.message)
          .fontSize(50)
          .fontWeight(FontWeight.Bold)
          .onClick(() =>{
            let context = getContext(this) as common.UIAbilityContext;
            context.startAbility({
              bundleName: 'com.huawei.hmos.settings',
              abilityName: 'com.huawei.hmos.settings.MainAbility',// com.huawei.hmos.settings.AppInfoAbility
              uri:'application_info_entry',
              parameters: {
                pushParams: 'com.huawei.hmsapp.appgallery' // 传入应用市场的包名
              }
            });
          })
      }
      .width('100%')
    }
    .height('100%')
  }
}

//appId是AGC网站上生成的,可以在AGC上查看对应的appId
import Want from '[@ohos](/user/ohos).app.ability.Want';
import common from '[@ohos](/user/ohos).app.ability.common';

[@Entry](/user/Entry)
[@Component](/user/Component)
struct Page1 {
  [@State](/user/State) appId: string = '1198478733497871104';
  controller: TextInputController = new TextInputController();
  build() {
    Row() {
      Column() {
        TextInput({ text: this.appId, placeholder: '请输入应用的appId', controller: this.controller })
          .width('90%')
          .onChange((value: string) => {
            this.appId = value
          })

        Button('点击跳转到鸿蒙版应用市场详情页面')
          .margin({top: 50})
          .onClick(() =>{
            const want: Want = {
              uri: store://appgallery.huawei.com/app/detail?id=C${this.appId}
            };
            const context = getContext(this) as common.UIAbilityContext;
            context.startAbility(want).then(() =>{
              //拉起成功
            }).catch(() =>{
              // 拉起失败
            });
          })
      }
      .width('100%')
    }
    .height('100%')
  }
}

更多关于HarmonyOS 鸿蒙Next 如何在我的应用中打开系统设置页面授予应用权限的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS(鸿蒙)系统中,若要在你的应用中打开系统设置页面以授予应用权限,通常需要使用系统提供的Intent或相关API来引导用户至对应的权限设置页面。以下是实现这一功能的方法概述:

HarmonyOS提供了特定的URI和Intent动作来引导用户至权限管理页面。你可以通过构建一个Intent,设置其动作为action_view(或鸿蒙系统提供的对应动作,需查阅官方文档确认)。

具体步骤如下:

  1. 构建Intent:创建一个Intent对象,并设置其动作为action_view(或鸿蒙系统提供的对应动作,需查阅官方文档确认)。

  2. 设置数据URI:为Intent设置数据URI,该URI应指向特定权限的管理页面。URI的格式和具体权限页面的路径需根据鸿蒙系统的规范来构建,这部分信息需参考鸿蒙系统的官方API文档或开发者指南。

  3. 启动Intent:使用startActivityForResultstartActivity方法启动该Intent,这将引导用户至系统设置中的权限管理页面。

请注意,由于鸿蒙系统的API可能会随着版本更新而变化,因此上述方法的具体实现细节(如Intent的动作和数据URI)需查阅最新的鸿蒙开发者文档来确认。

如果问题依旧没法解决请联系官网客服, 官网地址是 https://www.itying.com/category-93-b0.html

回到顶部