HarmonyOS鸿蒙Next系统权限的动态申请(以剪切板读取权限为例)

HarmonyOS鸿蒙Next系统权限的动态申请(以剪切板读取权限为例) 背景阐述:

  1. 云盘应用需要在用户打开app时,检测一下用户剪切板有没有新数据(使用 systemPasteboard.hasData(), 此时不需要系统权限);
  2. 如果有新数据时,需要向用户获取读取剪切板内容的权限(使用 PermissionUtil.checkRequestPermissions('ohos.permission.READ_PASTEBOARD')
  3. 用户同意后,读取剪切板中首条数据(使用pasteData.getPrimaryText()),并判断是否为云盘分享链接,如果是则发起后续分享接收链路。

问题描述:

  1. 在上述步骤中,在第2步使用PermissionUtil获取权限时,真机没有返回结果,模拟器直接返回false,看api描述这里会给用户弹一个权限申请的弹窗,没有看到。
  2. 理论上需要动态获取的权限,不应该在工程的module.json5中的requestPermissions中进行静态注册,尝试了一下也提示说只有少量特殊app才能获取,应该不是走这条链路。
  3. 所以请问应该如何动态获取权限,当前PermissionUtil.checkRequestPermissions调不通,是否是因为有限制。

更多关于HarmonyOS鸿蒙Next系统权限的动态申请(以剪切板读取权限为例)的实战教程也可以访问 https://www.itying.com/category-93-b0.html

4 回复

更多关于HarmonyOS鸿蒙Next系统权限的动态申请(以剪切板读取权限为例)的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS鸿蒙Next系统中,动态申请权限的流程与其他操作系统类似,主要是通过调用系统提供的API来实现。以剪切板读取权限为例,以下为具体步骤:

  1. 声明权限:首先,在应用的config.json文件中声明需要使用的权限。对于剪切板读取权限,需添加以下代码:
{
  "module": {
    "reqPermissions": [
      {
        "name": "ohos.permission.READ_CLIPBOARD"
      }
    ]
  }
}
  1. 检查权限:在代码中,使用abilityAccessCtrl模块的verifyAccessToken方法检查当前是否已获取该权限。示例代码:
import abilityAccessCtrl from '@ohos.abilityAccessCtrl';

let atManager = abilityAccessCtrl.createAtManager();
let tokenId = context.tokenId;
let permissionGranted = atManager.verifyAccessToken(tokenId, 'ohos.permission.READ_CLIPBOARD');
  1. 申请权限:如果未获取权限,使用requestPermissionsFromUser方法动态申请。示例代码:
import abilityAccessCtrl from '@ohos.abilityAccessCtrl';

let atManager = abilityAccessCtrl.createAtManager();
let permissions = ['ohos.permission.READ_CLIPBOARD'];
atManager.requestPermissionsFromUser(context, permissions).then((data) => {
  if (data.authResults[0] === 0) {
    // 权限申请成功
  } else {
    // 权限申请失败
  }
});
  1. 处理权限结果:根据权限申请的结果,执行相应的操作。如果权限申请成功,可以继续执行剪切板读取操作;如果失败,需提示用户或进行其他处理。

以上为HarmonyOS鸿蒙Next系统中动态申请剪切板读取权限的基本流程。

在HarmonyOS鸿蒙Next系统中,动态申请权限(如剪切板读取权限)的步骤如下:

  1. 声明权限:在config.json文件中声明所需的权限,例如:

    {
      "module": {
        "reqPermissions": [
          {
            "name": "ohos.permission.READ_CLIPBOARD"
          }
        ]
      }
    }
    
  2. 检查权限:在代码中使用abilityAccessCtrl模块检查当前是否已授权该权限:

    import abilityAccessCtrl from '[@ohos](/user/ohos).abilityAccessCtrl';
    
    const atManager = abilityAccessCtrl.createAtManager();
    const status = await atManager.checkAccessToken('ohos.permission.READ_CLIPBOARD');
    if (status === abilityAccessCtrl.GrantStatus.PERMISSION_GRANTED) {
      // 已授权
    } else {
      // 未授权
    }
    
  3. 申请权限:如果未授权,使用requestPermissionsFromUser方法动态申请权限:

    const permissions = ['ohos.permission.READ_CLIPBOARD'];
    atManager.requestPermissionsFromUser(this.context, permissions).then((data) => {
      if (data.authResults[0] === abilityAccessCtrl.GrantStatus.PERMISSION_GRANTED) {
        // 授权成功
      } else {
        // 授权失败
      }
    });
    

通过这些步骤,开发者可以在运行时动态申请并处理权限,确保应用在获取敏感权限时获得用户明确授权。

回到顶部