更新记录

1.2.2(2026-01-09)

  • 优化鸿蒙权限

1.2.1(2026-01-09)

  • 优化鸿蒙权限

1.2.0(2026-01-06)

  • 添加鸿蒙通知权限检测
  • 优化安卓权限检测
查看更多

平台兼容性

uni-app(4.01)

Vue2 Vue3 Chrome Safari app-vue app-nvue Android iOS 鸿蒙
- - - -
微信小程序 支付宝小程序 抖音小程序 百度小程序 快手小程序 京东小程序 鸿蒙元服务 QQ小程序 飞书小程序 小红书小程序 快应用-华为 快应用-联盟
- - - - - - - - - - - -

uni-app x(4.01)

Chrome Safari Android iOS 鸿蒙 微信小程序
- - -

hmn-permission

一套跨端权限工具,统一封装 Android / iOS / 鸿蒙 的权限检查、申请与跳转设置页,适用于 uni-app 及 uni-app x。

功能特点

  • 同一份 API 覆盖 Android、iOS、鸿蒙(OpenHarmony/HarmonyOS)
  • checkPermissions / requestPermissions / openSystemPermissionPage 三个核心方法,返回统一的 PermissionResult
  • iOS 内置 photo/camera/microphone/location/notification 的别名归一;鸿蒙内置应用详情页多候选兜底
  • 鸿蒙支持通过伪权限 __NOTIFICATION__ 统一检测/申请通知开关
  • 支持在用户勾选“不再询问”时,通过结果中的 doNotAskAgaindeniedDontAskAgainList 引导到系统设置

安装与引入

  • 插件市场直接安装或将代码放入 uni_modules/hmn-permission
  • 页面中引入:import { checkPermissions, requestPermissions, openSystemPermissionPage } from '@/uni_modules/hmn-permission'
  • 调用时需保证页面已启动(如 onLoad / onShow 后),以便 Android/Harmony 拿到有效 Activity/UIAbilityContext

支持的权限名约定

  • Android:可传任意系统权限常量(不限于示例常量),如 android.permission.CAMERAandroid.permission.RECORD_AUDIOandroid.permission.ACCESS_FINE_LOCATION
    • 相册/媒体在不同版本差异:Android 13+ 建议使用 android.permission.READ_MEDIA_IMAGES / READ_MEDIA_VIDEO / READ_MEDIA_AUDIO,旧版本可用 android.permission.READ_EXTERNAL_STORAGE
    • openSystemPermissionPage 可传需要引导的权限列表
  • iOS:仅支持内置映射到系统 API 的字符串,其他会直接视为拒绝
    • 相册:photo / photos / photoLibrary
    • 相机:camera
    • 麦克风:microphone / mic
    • 定位(前台):location / locationWhenInUse / location_when_in_use
    • 通知:notification / notifications / push
  • 鸿蒙:传 @ohos.abilityAccessCtrl 的权限名(不局限于示例常量),如 ohos.permission.CAMERAohos.permission.MICROPHONEohos.permission.LOCATION
    • 通知开关:使用常量 __NOTIFICATION__(可与其它权限并列传入)
    • 位置权限:推荐先模糊定位检测,再精确检测,示例:await checkPermissions(['ohos.permission.APPROXIMATELY_LOCATION', 'ohos.permission.LOCATION'])
    • openSystemPermissionPage 会兜底多种 Settings Ability,引导用户去开启权限

API 说明

checkPermissions(permissions)

  • Android/iOS 同步返回,鸿蒙为 Promise,推荐统一使用 await checkPermissions(...)
import { checkPermissions } from '@/uni_modules/hmn-permission'

const res = await checkPermissions(['android.permission.CAMERA'])
if (!res.allGranted) {
  // TODO: 给出引导
}

通知权限示例:

import { checkPermissions } from '@/uni_modules/hmn-permission'

// Android 13+ 用 android.permission.POST_NOTIFICATIONS
// iOS 用 notification / notifications / push
// 鸿蒙用 __NOTIFICATION__
const res = await checkPermissions(['__NOTIFICATION__'])

requestPermissions(permissions)

  • 申请权限并返回 Promise<PermissionResult>
import { requestPermissions, openSystemPermissionPage } from '@/uni_modules/hmn-permission'

const res = await requestPermissions(['android.permission.CAMERA'])
if (!res.allGranted && res.doNotAskAgain) {
  // 用户勾选“不再询问”,引导去系统设置
  openSystemPermissionPage(['android.permission.CAMERA'])
}

openSystemPermissionPage(permissions?)

  • 打开系统权限设置页;Android 支持传入需要高亮/引导的权限列表,iOS 无视参数直接跳转 App 设置,鸿蒙返回 Promise 可 await
    • iOS 的通知检查为了保持同步,在 native 侧做了短暂等待;

PermissionResult 结构

  • allGranted:是否全部授权
  • grantedList / deniedList / deniedDontAskAgainList:按状态分组的权限列表
  • doNotAskAgain:是否存在“不再询问”
  • statesMap<string, PermissionState> / Record<string, PermissionState>,可按传入的原始权限名取状态

注意事项

  • 请在 manifest.json(Android uses-permission、iOS InfoPlist usage description、鸿蒙 module.json5 权限声明)中提前声明需要的权限
  • 避免一次申请过多与业务无关的权限,遵循最小授权原则
  • 如需展示自定义提示,可先 checkPermissions 再决定是否触发 requestPermissions

隐私、权限声明

1. 本插件需要申请的系统权限列表:

2. 本插件采集的数据、发送的服务器地址、以及数据用途说明:

插件不采集任何数据

3. 本插件是否包含广告,如包含需详细说明广告表达方式、展示频率: