HarmonyOS鸿蒙Next中应用需要申请很多权限如APPROXIMATELY_LOCATION、LOCATION、ACCELEROMETER等的正确写法是什么?调requestPermissionsFromUser方法?

HarmonyOS鸿蒙Next中应用需要申请很多权限如APPROXIMATELY_LOCATION、LOCATION、ACCELEROMETER等的正确写法是什么?调requestPermissionsFromUser方法? 调requestPermissionsFromUser方法向用户权限,多个权限应该多次调用,还是仅调用一次?如果一次调用的话,怎么判断哪个权限获得了授权,哪个权限被用户拒绝了?

4 回复

可以一次调用,把同一个业务场景需要的 user_grant 权限放到一个 Permissions[] 里传给 requestPermissionsFromUser,不需要每个权限都单独弹一次。

返回结果里的 authResults 和你传入的 permissions 数组按下标对应,例如 authResults[i] 就是 permissions[i] 的授权结果,等于 GrantStatus.PERMISSION_GRANTED 时再继续访问对应能力。位置权限要额外注意:精确定位通常需要和模糊定位一起申请,或者在已有模糊定位后再申请精确定位。

更推荐的流程是:先在 module.json5 声明权限;触发具体功能时用 checkAccessToken 检查;缺哪个再调用 requestPermissionsFromUser。用户拒绝后不要反复弹窗,应该引导到设置页或使用 requestPermissionOnSetting。

更多关于HarmonyOS鸿蒙Next中应用需要申请很多权限如APPROXIMATELY_LOCATION、LOCATION、ACCELEROMETER等的正确写法是什么?调requestPermissionsFromUser方法?的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


申请权限不同一般多次调用

在HarmonyOS Next中,调用context.requestPermissionsFromUser(array)申请权限,其中array为字符串数组,例如['ohos.permission.APPROXIMATELY_LOCATION', 'ohos.permission.LOCATION', 'ohos.permission.ACCELEROMETER']。该方法返回Promise<Array<PermissionRequestResult>>,需异步处理结果。需先在module.json5requestPermissions字段中声明所有权限。

在HarmonyOS Next中,requestPermissionsFromUser支持一次传入多个权限(字符串数组),仅需调用一次。该方法返回一个PermissionRequestResult对象,其authResults数组与请求的权限顺序一一对应,每个元素值为0(已授权)或-1(被拒绝)。因此无需多次调用,通过遍历authResults即可区分每个权限的授权状态。

回到顶部