HarmonyOS鸿蒙Next中应用获取不同权限示例代码

HarmonyOS鸿蒙Next中应用获取不同权限示例代码 介绍
本示例基于abilityAccessCtrl实现了应用获取相机权限,位置信息以及步数信息三种常见权限的功能,每个权限都需要向用户申请,用户确认后才可开启。

应用获取不同权限源码链接

效果预览

使用说明

  1. 点击“打开相机”按钮,跳转到获取相机权限页,点击开始预览,应用向用户申请相机权限。
  2. 点击“获取位置信息”按钮,应用向用户申请位置权限,用户同意后,位置信息会显示在页面上。
  3. 点击“获取步数信息”按钮,跳转到获取步数查看权限页。

实现思路
调用requestPermissionsFromUser方法拉起弹框请求用户授权,点击获取时获取权限,在实际业务场景获取权限还需再判断一次是否已经授权,防止用户撤销授权。
核心代码如下,源码参考RequestPermission.ets

//获取权限弹框
async requestPermissions(permission: Permissions[], context: Context): Promise<void> {
  let atManager: abilityAccessCtrl.AtManager = abilityAccessCtrl.createAtManager();
  let result: PermissionRequestResult = await atManager.requestPermissionsFromUser(context, permission);
  let grantStatus: Array<number> = result.authResults;
  let length: number = grantStatus.length;
  for (let i = 0; i < length; i++) {
    if (grantStatus[i] !== 0) {
      //授权失败
      return;
    }
  }
  // 授权成功
  return;
}

//检查权限是否存在
async onRemoteMessageRequest(permissionName: Permissions): Promise<boolean> {
  let flag: boolean = true;
  let callerTokenId: number = rpc.IPCSkeleton.getCallingTokenId();
  hilog.info(0X0000, 'testTag', 'RpcServer: getCallingTokenId result: ' + callerTokenId);
  let atManager: abilityAccessCtrl.AtManager = abilityAccessCtrl.createAtManager();
  try {
    let res: number = await atManager.checkAccessToken(callerTokenId, permissionName)
    flag = (res === -1 ? false : true);
  } catch (err) {
    hilog.info(0X0000, 'testTag', `catch err->${JSON.stringify(err)}`);
  }
  return flag;
}

更多关于HarmonyOS鸿蒙Next中应用获取不同权限示例代码的实战教程也可以访问 https://www.itying.com/category-93-b0.html

2 回复

在HarmonyOS鸿蒙Next中,应用获取不同权限的示例代码主要涉及使用@ohos.abilityAccessCtrl模块来请求和管理权限。以下是一个简单的示例代码,展示如何请求和使用权限:

import abilityAccessCtrl from '@ohos.abilityAccessCtrl';
import promptAction from '@ohos.promptAction';

// 定义权限列表
const permissions: Array<string> = [
    'ohos.permission.CAMERA',
    'ohos.permission.READ_CONTACTS'
];

// 请求权限
async function requestPermissions() {
    try {
        const atManager = abilityAccessCtrl.createAtManager();
        const result = await atManager.requestPermissionsFromUser(permissions);

        if (result.authResults[0] === 0) {
            promptAction.showToast({ message: '权限获取成功' });
        } else {
            promptAction.showToast({ message: '权限获取失败' });
        }
    } catch (err) {
        console.error(`权限请求失败: ${err.code}, ${err.message}`);
    }
}

// 调用权限请求函数
requestPermissions();

在这个示例中,首先导入了@ohos.abilityAccessCtrl模块,然后定义了一个权限列表permissions,包含CAMERAREAD_CONTACTS两个权限。接着,通过createAtManager方法创建了一个权限管理对象atManager,并调用requestPermissionsFromUser方法请求这些权限。根据返回的authResults数组判断权限是否获取成功,并通过promptAction.showToast显示相应的提示信息。

更多关于HarmonyOS鸿蒙Next中应用获取不同权限示例代码的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS鸿蒙Next中,应用获取不同权限的示例代码如下:

// 检查权限
if (checkSelfPermission("ohos.permission.CAMERA") != PermissionGranted) {
    // 请求权限
    requestPermissions(new String[]{"ohos.permission.CAMERA"}, 1);
}

// 处理权限请求结果
@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
    if (requestCode == 1) {
        if (grantResults.length > 0 && grantResults[0] == PermissionGranted) {
            // 权限被授予
        } else {
            // 权限被拒绝
        }
    }
}

此代码展示了如何检查、请求和处理摄像头权限。

回到顶部