更新记录
1.0.0(2026-11-03)
tt-permission 权限检测插件
基于 UTS 实现的跨端权限检测与设置跳转插件,一套 API 适配 Android / iOS / 微信小程序 三端。
平台兼容性
uni-app(5.0)
| Vue2 | Vue3 | Chrome | Safari | app-vue | app-nvue | Android | iOS | 鸿蒙 |
|---|---|---|---|---|---|---|---|---|
| √ | √ | - | - | √ | √ | 4.4 | 12 | - |
| 微信小程序 | 支付宝小程序 | 抖音小程序 | 百度小程序 | 快手小程序 | 京东小程序 | 鸿蒙元服务 | QQ小程序 | 飞书小程序 | 小红书小程序 | 快应用-华为 | 快应用-联盟 |
|---|---|---|---|---|---|---|---|---|---|---|---|
| √ | - | - | - | - | - | - | - | - | - | - | - |
uni-app x(5.0)
| Chrome | Safari | Android | iOS | 鸿蒙 | 微信小程序 |
|---|---|---|---|---|---|
| - | - | - | - | - | - |
其他
| 多语言 | 暗黑模式 | 宽屏模式 | 蒸汽模式 |
|---|---|---|---|
| × | × | × | √ |
tt-permission 权限检测插件
基于 UTS 实现的跨端权限检测与设置跳转插件,一套 API 适配 Android / iOS / 微信小程序 三端。
支持的权限
| 权限类型 (type) | 名称 | Android | iOS | 微信小程序 |
|---|---|---|---|---|
notification |
通知 | ✅ | ✅ | ❌(订阅消息,无 scope) |
location |
位置 | ✅ | ✅ | ✅ scope.userLocation |
albumWrite |
相册写入 | ✅ | ✅ | ✅ scope.writePhotosAlbum |
albumRead |
相册读取 | ✅ | ✅ | ✅(无需授权) |
camera |
相机 | ✅ | ✅ | ✅ scope.camera |
microphone |
麦克风 | ✅ | ✅ | ✅ scope.record |
record |
录音 | ✅ | ✅ | ✅ scope.record |
phone |
拨打电话 | ✅ | ❌ | ✅(无需授权) |
floatingWindow |
悬浮窗 | ✅ | ❌ | ❌ |
目录结构
uni_modules/tt-permission/
├── package.json
├── readme.md
└── utssdk/
├── interface.uts # 类型定义
├── index.uts # 兜底实现(H5 / 未适配平台)
├── app-android/
│ ├── index.uts # Android 实现
│ └── config.json
├── app-ios/
│ ├── index.uts # iOS 实现
│ └── config.json
└── mp-weixin/
└── index.uts # 微信小程序实现
快速开始
import {
checkPermission,
requestPermission,
openSettings
} from '@/uni_modules/tt-permission'
// 1. 检测权限
const status = await checkPermission('camera')
// 2. 申请权限
const result = await requestPermission('camera')
// 3. 权限被拒绝后,跳转设置页引导用户手动开启
if (result === 'denied') {
openSettings('camera')
}
API 文档
权限类型(字符串值,直接作为参数传入)
| 字符串值 | 说明 |
|---|---|
"notification" |
通知 |
"location" |
位置 |
"albumWrite" |
相册写入 |
"albumRead" |
相册读取 |
"camera" |
相机 |
"microphone" |
麦克风 |
"record" |
录音 |
"phone" |
拨打电话 |
"floatingWindow" |
悬浮窗 |
权限状态(字符串返回值)
| 字符串值 | 说明 |
|---|---|
"granted" |
已授权 |
"denied" |
已拒绝 |
"undetermined" |
未决定 |
"restricted" |
受限 |
"notSupported" |
当前平台不支持 |
方法
checkPermission(type: string): Promise<string>
检测指定权限的授权状态,返回状态字符串。
requestPermission(type: string): Promise<string>
申请指定权限,返回申请后的状态字符串。
openSettings(type: string | null): void
跳转到权限设置页:
- 传入具体权限类型时跳转到对应设置页(Android 通知/悬浮窗有专属设置页);
- 传入
null时跳转到应用通用设置页。
平台差异说明
Android
- 通知权限:Android 13+ 动态申请
POST_NOTIFICATIONS,Android 7~12 通过areNotificationsEnabled判断。 - 相册读取:Android 13+ 使用
READ_MEDIA_IMAGES/VIDEO,低版本使用READ_EXTERNAL_STORAGE。 - 相册写入:Android 10+ 通过 MediaStore 写入,无需存储权限。
- 悬浮窗:特殊权限,无法通过运行时弹窗申请,需跳转系统标准
ACTION_MANAGE_OVERLAY_PERMISSION设置页手动开启(部分 ROM 会显示应用列表)。
iOS
- 跳转设置:iOS 只能跳转到当前应用自身的设置页。
- 拨打电话 / 悬浮窗:iOS 无对应运行时权限,返回
notSupported。 - 定位申请:iOS 授权结果由系统弹窗决定,
requestPermission返回后建议再次checkPermission检测最终状态。
微信小程序
- 使用
uni.getSetting/uni.authorize/uni.openSetting。 - 通知为订阅消息,无持久化 scope,返回
notSupported。 - 相册读取、拨打电话无需授权,返回
granted。
配置要求
Android 权限声明(manifest.json)
已在 manifest.json → app-plus → distribute → android → permissions 中配置以下权限:
POST_NOTIFICATIONS、ACCESS_FINE_LOCATION、ACCESS_COARSE_LOCATION、CAMERA、RECORD_AUDIO、CALL_PHONE、READ_EXTERNAL_STORAGE、WRITE_EXTERNAL_STORAGE、READ_MEDIA_IMAGES、READ_MEDIA_VIDEO、SYSTEM_ALERT_WINDOW。
iOS 隐私描述(manifest.json)
已在 manifest.json → app-plus → distribute → ios → privacyDescription 中配置:
NSCameraUsageDescription、NSMicrophoneUsageDescription、NSPhotoLibraryUsageDescription、NSPhotoLibraryAddUsageDescription、NSLocationWhenInUseUsageDescription、NSLocationAlwaysUsageDescription。
微信小程序(manifest.json)
已配置 requiredPrivateInfos: ["getLocation"] 及 scope.userLocation 描述。
注意事项
- 自定义基座:App 端需使用「自定义调试基座」运行,标准基座不包含本插件原生代码。
- 编译环境:UTS 插件需 HBuilderX 3.8.2+ 编译。
- 首次申请权限前建议先向用户说明用途,避免被永久拒绝。
- 用户「拒绝且不再询问」后,只能通过
openSettings引导用户到设置页手动开启。

收藏人数:
购买源码授权版(
试用
赞赏(0)
下载 1
赞赏 0
下载 12739115
赞赏 1959
赞赏
京公网安备:11010802035340号