更新记录

1.0.2(2025-11-11)

明晰文档说明~

1.1.0(2025-09-30)

1.1.1更新

UTS权限管理插件 (uts-permission)

插件简介

这是一个基于 UTS (UniApp TypeScript) 实现的 Android与ios 动态权限申请插件,提供了简洁易用的 API 来管理 Android与ios 运行时权限。

特性

  • ✅ 使用 UTS 语法编写,无需编译原生基座
  • ✅ 支持多种常用权限的申请和管理
  • ✅ 提供同步和异步两种调用方式
  • ✅ 完整的 TypeScript 类型定义
  • ✅ 支持单个和批量权限申请
  • ✅ 支持特殊权限(悬浮窗、系统设置)

支持的权限类型

普通权限

  • storage - 写入外部存储权限
  • readStorage - 读取外部存储权限
  • camera - 相机权限
  • location - 精确定位权限
  • coarseLocation - 大致定位权限
  • microphone - 麦克风/录音权限
  • phone - 拨打电话权限
  • phoneState - 读取电话状态权限
  • contacts - 读取通讯录权限
  • writeContacts - 写入通讯录权限
  • sms - 发送短信权限
  • readSms - 读取短信权限
  • receiveSms - 接收短信权限

特殊权限

  • overlay - 悬浮窗权限
  • writeSettings - 系统设置权限

安装方式

方式一:通过 HBuilderX 导入

  1. uts-permission 文件夹复制到项目的 uni_modules 目录下
  2. 重新编译运行项目

方式二:通过插件市场导入

  1. 在 HBuilderX 中打开插件市场
  2. 搜索 "uts-permission"
  3. 点击导入到项目

使用方法

#


平台兼容性

uni-app

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

uni-app x

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

Z-UTS权限管理插件 (z-uts-permission)

插件简介

这是一个基于 UTS (UniApp TypeScript) 实现的跨平台动态权限申请插件,支持 Android 和 iOS 平台,提供了简洁易用的 API 来管理运行时权限。

特性

  • ✅ 使用 UTS 语法编写,需要编译原生基座
  • ✅ 支持 Android 和 iOS 双平台
  • ✅ 支持多种常用权限的申请和管理
  • ✅ 提供同步和异步两种调用方式
  • ✅ 完整的 TypeScript 类型定义
  • ✅ 支持单个和批量权限申请
  • ✅ 支持特殊权限(Android:悬浮窗、系统设置)

支持的权限类型

平台差异对比表

权限类型 权限 Key Android iOS 说明
相机 camera 两端都支持
相册 photoLibrary iOS 独有
存储(写) storage Android 独有,iOS 沙盒化
存储(读) readStorage ✅* Android 独有,iOS 映射到相册
精确定位 location 两端都支持
大致定位 coarseLocation ✅* Android 独有,iOS 映射到定位
麦克风 microphone 两端都支持
通讯录(读) contacts 两端都支持
通讯录(写) writeContacts ✅* Android 独有,iOS 映射到通讯录
蓝牙 bluetooth 两端都支持
电话 phone Android 独有
电话状态 phoneState Android 独有
发送短信 sms Android 独有
读取短信 readSms Android 独有
接收短信 receiveSms Android 独有
悬浮窗 overlay Android 特殊权限
系统设置 writeSettings Android 特殊权限

说明:

  • ✅ 表示该平台支持此权限
  • ❌ 表示该平台不支持此权限
  • ✅* 表示该平台会映射到其他权限

Android 普通权限(13个)

  • storage - 写入外部存储权限
  • readStorage - 读取外部存储权限
  • camera - 相机权限
  • location - 精确定位权限
  • coarseLocation - 大致定位权限
  • microphone - 麦克风/录音权限
  • bluetooth - 蓝牙权限
  • phone - 拨打电话权限
  • phoneState - 读取电话状态权限
  • contacts - 读取通讯录权限
  • writeContacts - 写入通讯录权限
  • sms - 发送短信权限
  • readSms - 读取短信权限
  • receiveSms - 接收短信权限

Android 特殊权限(2个)

  • overlay - 悬浮窗权限
  • writeSettings - 系统设置权限

iOS 权限(6个)

  • camera - 相机权限
  • photoLibrary - 相册权限
  • location - 定位权限
  • microphone - 麦克风权限
  • contacts - 通讯录权限
  • bluetooth - 蓝牙权限

平台映射说明

iOS 平台映射:

  • storagephotoLibrary (相册权限)
  • readStoragephotoLibrary (相册权限)
  • coarseLocationlocation (定位权限)
  • writeContactscontacts (通讯录权限)

安装方式

方式一:通过 HBuilderX 导入

  1. z-uts-permission 文件夹复制到项目的 uni_modules 目录下
  2. 重新编译运行项目

方式二:通过插件市场导入

  1. 在 HBuilderX 中打开插件市场
  2. 搜索 "z-uts-permission"
  3. 点击导入到项目

使用方法

1. 导入插件

import { 
  checkPermission, 
  checkPermissions, 
  requestPermission, 
  requestPermissions,
  openAppSettings,
  openSystemSettings,
  getPermissionName,
  getSupportedPermissions
} from "@/uni_modules/z-uts-permission"

2. 检查单个权限

const result = checkPermission({ permission: "camera" })
console.log(result.granted) // true 或 false

3. 检查多个权限

const result = checkPermissions({ 
  permissions: ["camera", "storage", "location"] 
})
console.log(result.allGranted) // 是否全部授予
console.log(result.permissions) // 每个权限的详细状态

4. 申请单个权限

requestPermission({ permission: "camera" }, (result) => {
  if (result.granted) {
    console.log("相机权限已授予")
  } else {
    console.log("相机权限被拒绝")
  }
})

5. 申请多个权限

requestPermissions({ 
  permissions: ["camera", "storage", "microphone"] 
}, (result) => {
  if (result.allGranted) {
    console.log("所有权限已授予")
  } else {
    console.log("部分权限被拒绝")
    console.log(result.permissions)
  }
})

6. 申请蓝牙权限

// 申请蓝牙权限
requestPermission({ permission: "bluetooth" }, (result) => {
  if (result.granted) {
    console.log("蓝牙权限已授予")
  } else {
    console.log("蓝牙权限被拒绝")
  }
})

7. 申请特殊权限(仅 Android)

// 申请悬浮窗权限
requestPermission({ permission: "overlay" }, (result) => {
  console.log("悬浮窗权限:", result.granted)
})

// 申请系统设置权限
requestPermission({ permission: "writeSettings" }, (result) => {
  console.log("系统设置权限:", result.granted)
})

8. 打开设置页面

支持平台:Android 和 iOS

// 打开应用设置页面(引导用户手动开启权限)
openAppSettings({}, (result) => {
  console.log("已打开应用设置页面")
})

// 打开系统设置页面
// Android:打开系统设置主页面
// iOS:同应用设置页面(iOS 限制,只能打开应用设置)
openSystemSettings({}, (result) => {
  console.log("已打开系统设置页面")
})

平台差异说明:

方法 Android iOS
openAppSettings 打开当前应用的详细设置页面 打开当前应用的设置页面
openSystemSettings 打开系统设置主页面 openAppSettings(iOS 限制)

使用场景:

  • 用户拒绝权限后,引导用户去设置页面手动开启
  • 权限被永久拒绝时,提示用户前往设置页面

9. 获取权限名称

const result = getPermissionName({ permission: "camera" })
console.log(result.name) // "相机权限"

10. 获取所有支持的权限

const result = getSupportedPermissions({})
console.log(result.permissions) // 所有支持的权限列表

API 文档

checkPermission(options)

检查单个权限状态(同步方法)

参数:

  • options.permission (string) - 权限名称

返回值:

{
  success: boolean,
  permission: string,
  granted: boolean,
  message: string
}

checkPermissions(options)

检查多个权限状态(同步方法)

参数:

  • options.permissions (string[]) - 权限名称数组

返回值:

{
  success: boolean,
  allGranted: boolean,
  permissions: Array<{
    permission: string,
    granted: boolean
  }>
}

requestPermission(options, callback)

申请单个权限(异步方法)

参数:

  • options.permission (string) - 权限名称
  • callback (function) - 回调函数

回调参数:

{
  success: boolean,
  permission: string,
  granted: boolean,
  message: string
}

requestPermissions(options, callback)

申请多个权限(异步方法)

参数:

  • options.permissions (string[]) - 权限名称数组
  • callback (function) - 回调函数

回调参数:

{
  success: boolean,
  allGranted: boolean,
  permissions: Array<{
    permission: string,
    granted: boolean
  }>,
  message: string
}

Android 权限配置

AndroidManifest.xml 配置

Android 需要在 AndroidManifest.xml 中声明权限,插件已经自动处理了常用权限,但如果需要自定义,可以在项目的 manifest.json 中配置:

{
  "app-plus": {
    "distribute": {
      "android": {
        "permissions": [
          "<uses-permission android:name=\"android.permission.CAMERA\"/>",
          "<uses-permission android:name=\"android.permission.READ_EXTERNAL_STORAGE\"/>",
          "<uses-permission android:name=\"android.permission.WRITE_EXTERNAL_STORAGE\"/>",
          "<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.BLUETOOTH_CONNECT\"/>",
          "<uses-permission android:name=\"android.permission.BLUETOOTH_SCAN\"/>",
          "<uses-permission android:name=\"android.permission.CALL_PHONE\"/>",
          "<uses-permission android:name=\"android.permission.READ_PHONE_STATE\"/>",
          "<uses-permission android:name=\"android.permission.READ_CONTACTS\"/>",
          "<uses-permission android:name=\"android.permission.WRITE_CONTACTS\"/>",
          "<uses-permission android:name=\"android.permission.SEND_SMS\"/>",
          "<uses-permission android:name=\"android.permission.READ_SMS\"/>",
          "<uses-permission android:name=\"android.permission.RECEIVE_SMS\"/>",
          "<uses-permission android:name=\"android.permission.SYSTEM_ALERT_WINDOW\"/>",
          "<uses-permission android:name=\"android.permission.WRITE_SETTINGS\"/>"
        ]
      }
    }
  }
}

Android 权限说明

  • 蓝牙权限:Android 12 (API 31) 及以上需要 BLUETOOTH_CONNECTBLUETOOTH_SCAN 权限
  • 存储权限:Android 10 (API 29) 及以上推荐使用 Scoped Storage
  • 定位权限:需要同时声明 ACCESS_FINE_LOCATIONACCESS_COARSE_LOCATION
  • 特殊权限SYSTEM_ALERT_WINDOWWRITE_SETTINGS 需要用户手动授权

iOS 权限配置

Info.plist 配置

iOS 需要在 Info.plist 中配置权限描述,插件已经内置了默认的权限描述,但你也可以在项目的 manifest.json 中自定义:

{
  "app-plus": {
    "distribute": {
      "ios": {
        "privacyDescription": {
          "NSCameraUsageDescription": "需要访问您的相机以拍摄照片和视频",
          "NSPhotoLibraryUsageDescription": "需要访问您的相册以选择照片和视频",
          "NSPhotoLibraryAddUsageDescription": "需要访问您的相册以保存照片和视频",
          "NSLocationWhenInUseUsageDescription": "需要访问您的位置信息以提供基于位置的服务",
          "NSLocationAlwaysUsageDescription": "需要始终访问您的位置信息",
          "NSLocationAlwaysAndWhenInUseUsageDescription": "需要访问您的位置信息以提供基于位置的服务",
          "NSMicrophoneUsageDescription": "需要访问您的麦克风以录制音频",
          "NSBluetoothAlwaysUsageDescription": "需要访问您的蓝牙以连接设备",
          "NSBluetoothPeripheralUsageDescription": "需要访问您的蓝牙以连接外围设备",
          "NSContactsUsageDescription": "需要访问您的通讯录"
        }
      }
    }
  }
}

iOS 权限说明

  • 相机权限:需要配置 NSCameraUsageDescription
  • 相册权限:需要配置 NSPhotoLibraryUsageDescriptionNSPhotoLibraryAddUsageDescription
  • 定位权限:需要配置 NSLocationWhenInUseUsageDescriptionNSLocationAlwaysUsageDescription
  • 麦克风权限:需要配置 NSMicrophoneUsageDescription
  • 蓝牙权限:需要配置 NSBluetoothAlwaysUsageDescriptionNSBluetoothPeripheralUsageDescription
  • 通讯录权限:需要配置 NSContactsUsageDescription

注意事项

  1. 编译原生基座:本插件需要编译原生基座才能使用,不能直接在标准基座中运行
  2. 平台支持:支持 Android 和 iOS 双平台
  3. Android 版本:部分权限在不同 Android 版本上的行为可能不同
  4. iOS 权限:iOS 权限需要在 Info.plist 中配置权限描述
  5. 特殊权限:Android 的悬浮窗和系统设置权限需要跳转到系统设置页面进行授权
  6. 权限说明:建议在申请权限前向用户说明权限用途
  7. 打开设置页面
    • Android:openAppSettings 打开应用设置,openSystemSettings 打开系统设置
    • iOS:两个方法都打开应用设置页面(iOS 系统限制)
  8. 编译基座步骤
    • 在 HBuilderX 中选择"运行" -> "运行到手机或模拟器" -> "制作自定义调试基座"
    • 等待编译完成后,使用自定义基座运行项目

更新日志

1.0.0 (2025-09-30)

  • 首次发布
  • 支持常用权限的检查和申请
  • 支持特殊权限(悬浮窗、系统设置)
  • 提供完整的 TypeScript 类型定义

开发文档

许可证

MIT License

技术支持

如有问题或建议,欢迎提交 Issue。

隐私、权限声明

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

需要申请的权限:存储、相机、定位、麦克风、电话、通讯录、短信等(Android和iOS)

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

插件不采集任何数据

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

无广告

暂无用户评论。