更新记录

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 描述。

注意事项

  1. 自定义基座:App 端需使用「自定义调试基座」运行,标准基座不包含本插件原生代码。
  2. 编译环境:UTS 插件需 HBuilderX 3.8.2+ 编译。
  3. 首次申请权限前建议先向用户说明用途,避免被永久拒绝。
  4. 用户「拒绝且不再询问」后,只能通过 openSettings 引导用户到设置页手动开启。

隐私、权限声明

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

"permissions" : [ "<uses-permission android:name=\"android.permission.CHANGE_NETWORK_STATE\"/>", "<uses-permission android:name=\"android.permission.MOUNT_UNMOUNT_FILESYSTEMS\"/>", "<uses-permission android:name=\"android.permission.VIBRATE\"/>", "<uses-permission android:name=\"android.permission.READ_LOGS\"/>", "<uses-permission android:name=\"android.permission.ACCESS_WIFI_STATE\"/>", "<uses-feature android:name=\"android.hardware.camera.autofocus\"/>", "<uses-permission android:name=\"android.permission.ACCESS_NETWORK_STATE\"/>", "<uses-permission android:name=\"android.permission.CAMERA\"/>", "<uses-permission android:name=\"android.permission.GET_ACCOUNTS\"/>", "<uses-permission android:name=\"android.permission.READ_PHONE_STATE\"/>", "<uses-permission android:name=\"android.permission.CHANGE_WIFI_STATE\"/>", "<uses-permission android:name=\"android.permission.WAKE_LOCK\"/>", "<uses-permission android:name=\"android.permission.FLASHLIGHT\"/>", "<uses-feature android:name=\"android.hardware.camera\"/>", "<uses-permission android:name=\"android.permission.WRITE_SETTINGS\"/>", "<uses-permission android:name=\"android.permission.ACCESS_FINE_LOCATION\"/>", "<uses-permission android:name=\"android.permission.ACCESS_COARSE_LOCATION\"/>", "<uses-permission android:name=\"android.permission.RECORD_AUDIO\"/>", "<uses-permission android:name=\"android.permission.CALL_PHONE\"/>", "<uses-permission android:name=\"android.permission.READ_EXTERNAL_STORAGE\"/>", "<uses-permission android:name=\"android.permission.WRITE_EXTERNAL_STORAGE\"/>", "<

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

插件不采集任何数据

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

无

暂无用户评论。