更新记录
1.0.1(2025-02-04)
更新Demo工程
1.0.0(2025-02-04)
适配Android、iOS和HarmonyOS Next
平台兼容性
Vue2 | Vue3 |
---|---|
√ | √ |
App | 快应用 | 微信小程序 | 支付宝小程序 | 百度小程序 | 字节小程序 | QQ小程序 |
---|---|---|---|---|---|---|
HBuilderX 4.44,Android:9.0,iOS:12,HarmonyNext:支持 | × | × | × | × | × | × |
钉钉小程序 | 快手小程序 | 飞书小程序 | 京东小程序 | 鸿蒙元服务 |
---|---|---|---|---|
× | × | × | × | × |
H5-Safari | Android Browser | 微信浏览器(Android) | QQ浏览器(Android) | Chrome | IE | Edge | Firefox | PC-Safari |
---|---|---|---|---|---|---|---|---|
× | × | × | × | × | × | × | × | × |
permission-handler
介绍
permission-handler-plus 是一款支持iOS/Android/HarmonyOS 的权限申请插件
免费版permission-handler(不支持HarmonyOS Next)
使用方法
import {
checkPermission, requestPermissions
} from '@/uni_modules/permission-handler';
requestLocation() {
checkPermission('Location', (result) => {
console.log(result)
if (result == "denied") {
requestPermissions({
names: ['Location'],
success: (result) => {
console.log(result)
},
fail:(error) => {
console.log(error)
}
})
}
})
}
参数及结果说明:
权限状态说明
PermissionStatus: string
状态 | iOS | Android | HarmonyOS Next |
---|---|---|---|
denied | 用户拒绝访问所请求的功能,需要先请求权限。 | 用户拒绝访问所请求的功能,需要先请求权限。 | 用户拒绝访问所请求的功能,需要先请求权限。 |
granted | 用户授予了所请求功能的访问权限。 | 用户授予了所请求功能的访问权限。 | 用户授予了所请求功能的访问权限。 |
restricted | 操作系统拒绝访问所请求的功能,可能是由于启用了家长控制等活动限制。 | 不适用。 | 表示请求无效,可能原因有: -未在设置文件中声明目标权限。 -权限名非法。 -部分权限存在特殊申请条件,在申请对应权限时未满足其指定的条件 |
limited | 用户已授权此应用程序进行有限访问(仅支持 iOS 14+)。 | 用户已授权此应用程序进行有限访问(仅支持 Android 14+)。 | 不适用。 |
permanentlyDenied | 用户拒绝权限,并选择不再显示权限对话框。 用户可在设置中更改权限状态。 |
Android 11+:用户第二次拒绝权限。 Android 11 以下:用户拒绝并选择不再显示请求。 |
不适用。 |
provisional | 应用程序被临时授权发送非打扰性用户通知(仅支持 iOS 12+)。 | 不适用。 | 不适用。 |
权限列表说明
name: string
状态 | iOS | Android | HarmonyOS Next | |
---|---|---|---|---|
Calendar | 日历(事件) | 日历 | 日历(读) | |
Camera | 照片(相机胶卷和摄像头) | 摄像头 | 摄像头 | |
Contacts | 通讯录 | 通讯录 | 通讯录(读) | |
Location | CoreLocation(始终和使用时) | 精确位置和模糊位置 | 精确位置,需先申请模糊位置(ProximatelyLocation) | |
LocationAlways | CoreLocation - 始终 | Android 10+: 后台位置权限 Android 10以下: 精确位置和模糊位置权限 |
后台位置,需同时申请模糊位置和精确位置(ProximatelyLocation,Location) | |
LocationWhenInUse | CoreLocation - 使用时 | 精确位置和模糊位置 | 不适用 | |
MediaLibrary | 媒体库(仅支持 iOS 9.3+) | 不适用 | 媒体库(读) API 12以后废弃 |
|
Microphone | 麦克风 | 麦克风 | 麦克风 | |
Phone | 不适用 | 电话状态 | 不适用 | |
Photos | 照片(iOS 14+ 提供读写访问级别) | Android 13+: photos Android 12以下: storage |
不适用 | |
PhotosAddOnly | 照片(仅限添加,iOS 14+ 提供读写访问级别) | 不适用 | 不适用 | |
Reminders | 提醒事项 | 不适用 | 不适用 | |
Sensors | CoreMotion | 身体传感器 | 不适用 | |
Sms | 不适用 | 发送和读取短信(仅限 Android) | 不适用 | |
Speech | 语音识别(与麦克风权限不同) | 语音识别(与麦克风权限相同) | 不适用 | |
Storage | 默认隐式授予(访问 Documents 或 Downloads 文件夹) | Android 13+: 替代为 photos 、video 等Android 12以下: 读写外部存储权限 |
不适用 | |
IgnoreBatteryOptimizations | 不适用 | 忽略电池优化(仅限 Android) | 不适用 | |
Notification | 推送通知 | 推送通知 | 不适用 | |
AccessMediaLocation | 不适用 | Android 10+(API 29+):访问共享媒体中的地理位置 | 访问用户媒体文件中的地理位置信息 | |
ActivityRecognition | 不适用 | Android 10+(API 29+):活动信息 | 活动信息 | |
Bluetooth | Core Bluetooth 授权状态(iOS 13+) | 总是允许 | 蓝牙授权状态 | |
ManageExternalStorage | 不适用 | Android 11+(API 30+):广泛访问分区存储中的文件 | 不适用 | |
SystemAlertWindow | 不适用 | 创建覆盖所有应用的窗口(仅限 Android) | 不适用 | |
RequestInstallPackages | 不适用 | 安装包的权限(Android Marshmallow+) | 不适用 | |
AppTrackingTransparency | 应用跟踪状态,广告标识符 | 不适用 | 应用读取开放匿名设备标识符(广告标识符)。 | |
CriticalAlerts | 关键通知 | 不适用 | 不适用 | |
AccessNotificationPolicy | 不适用 | 访问通知策略(Android Marshmallow+) | 不适用 | |
BluetoothScan | 不适用 | 扫描蓝牙设备(Android 12+) | 不适用 | |
BluetoothAdvertise | 不适用 | 广播蓝牙设备(Android 12+) | 不适用 | |
BluetoothConnect | 不适用 | 连接蓝牙设备(Android 12+) | 不适用 | |
NearbyWifiDevices | 不适用 | 通过 Wi-Fi 连接附近设备(Android 13+) | 星闪链接附近设备 | |
Videos | 不适用 | 访问外部存储的视频文件(Android 13+) | 不适用 | |
Audio | 不适用 | 访问外部存储的音频文件(Android 13+) | 读取用户公共目录的音频文件 | |
ScheduleExactAlarm | 不适用 | 调度精确闹钟(Android 12+) | 不适用 | |
SensorsAlways | 不适用 | 后台访问设备传感器(Android 13+) | 不适用 | |
CalendarWriteOnly | 写入日历(与 CalendarFullAccess 相同,仅限 iOS 16 以下) | 不适用 | 日历(写) | |
CalendarFullAccess | 读写日历 | 日历 | 不适用 | |
Assistant | SiriKit | 无操作 | 不适用 | |
BackgroundRefresh | 读取后台刷新状态 | 不适用 | 不适用 | |
MediaLibraryAddOnly | 不适用 | 不适用 | 媒体库(写) API 12以后废弃 |
|
ImageVideoRead | 不适用 | 不适用 | 读取用户公共目录的图片或视频文件 | |
ImageVideoWrite | 不适用 | 不适用 | 修改用户公共目录的图片或视频文件 | |
AudioAddOnly | 不适用 | 不适用 | 修改用户公共目录的音频文件 | |
Pasteboard | 不适用 | 不适用 | 应用读取剪贴板。 | |
DistributeDataSync | 不适用 | 不适用 | 不同设备间的数据交换 | |
ProximatelyLocation | 不适用 | 不适用 | 获取设备模糊位置信息。 | |
HealthData | 不适用 | 不适用 | 读取用户的健康数据 | |
DownloadDirectory | 不适用 | 不适用 | 访问公共目录下Download目录及子目录 | |
DocumentDirectory | 不适用 | 不适用 | 访问公共目录下的Documents目录及子目录 |
请求权限 requestPermissions
/// 请求权限
requestPermissions({
names: ['Location', 'Calendar'],
success: (result) => {
/// 请求结果
/// result: {
/// 'Location' : 'granted',
/// 'Calendar' : 'denied'
/// }
console.log(result)
},
fail:(error) => {
/// 请求异常
/// error: {
/// 'code' : '错误码',
/// 'msg' : '错误原因'
/// }
console.log(error)
}
})
注意
- 为了不影响应用上架应用商店,插件自身不添加配置任何权限,应用使用到哪些权限就在项目的manifest.json中配置哪些权限,不使用尽量不添加
- 真机调试 HbuilderX 需要配置各平台运行环境配置
- 真机调试Android需要自定义基座,除了基座自带权限,添加新的权限后调试需要重新打包新基座,否则相当于没有配置权限,iOS不需要自定义基座。
- Android targetSDK 请设置不低于28。
- HarmonyOS Next 权限与iOS和Android相比差别更大一些,很多权限只需声明不需要动态申请,如Notification等,并且对用户访问数据权限控制更严格如剪切板、本地文件、通讯录等,需要在开发平台下配置或者审核才能够正常使用,详情参考HarmonyOS Next 应用权限管控
- 未配置权限会直接返回denied