@capawesome/capacitor-permissions

中文文档
0.1.2发布于 2026/09/02MITTypeScriptESM + CJS零依赖构建来源已验证近 30 天下载 6397

Capacitor插件可以检查和请求设备权限,在Android,iOS,和Web上有一个统一的API.

中文使用文档
文档目录32 节
  1. 特征
  2. 使用大小写
  3. 兼容性
  4. 安装
  5. 机器人
  6. iOS系统
  7. 配置
  8. 使用量
  9. 请检查一个或多个权限的状态
  10. 请求一个或多个权限
  11. API 密码
  12. 检查(...)
  13. 请求(...)
  14. 接口
  15. 类型异名
  16. 数字
  17. 平台行为
  18. 请求背景位置
  19. 从被拒绝的权限收回
  20. App 跟踪透明度
  21. 财务问题
  22. 此插件与其他类似插件有何不同?
  23. 这是否 check 方法触发许可提示 ?
  24. 为什么 request 用错误拒绝方法 ?
  25. 我需要在应用程序中声明所有支持的权限吗?
  26. 我如何请求访问背景位置?
  27. 如果拒绝许可我该怎么办?
  28. 网络上支持哪些权限 ?
  29. 相关插件
  30. 通讯
  31. 更改日志
  32. 许可证

电容许可插件

Capacitor 插件可以检查和请求设备权限,并使用统一的API.

特征

  • 🖥️ 跨平台:支持Android,iOS和Web(部分).
  • 🧩 统一 API: 检查并请求使用单个API的多个不同权限,而不是为每个选项安装特性插件.
  • 🗂️ 已解析目录: 支持蓝牙,日历,相机,联系人,位置,背景位置,麦克风,动作,通知,相片和提醒.
  • 🔍 快速免费检查编号: check(...) 方法从不触发许可提示.
  • 🪶 轻巧: 插件本身不声明任何权限 。 您的应用程序只声明其实际使用的权限 .
  • 🤝 兼容性: 与 设置启动器 财务报告和审定财务报表 App 跟踪透明度 插件 .
  • 📦 可可花和SPM:支持CocoaPods和Swift软件包管理器用于iOS.
  • 🔁 最新数据:总是支持最新的Capacitor版本.
  • ✨ 手工业:由地而上地而上以关怀和专长而来,不是要塞或AI生成.

缺少一个功能? 刚刚 打开一个问题 我们看看!

使用大小写

当应用程序需要在一个地方管理多个设备权限时,通常会使用权限插件,例如:

  • 登入屏幕: 以快速免费方式检查您的应用程序使用的所有权限状态 check(...) 方法,并用一个概览来介绍.
  • 上下文许可请求:在用户开始视频通话或录音之前,请求摄像头或麦克风许可.
  • 背景位置升级: 请求 LOCATION 先允许,再升级到 LOCATION_ALWAYS 之后,按照平台的建议.
  • 从被拒绝的权限收回: 检测 denied 状态并引导用户到应用程序设置中重新启用权限.

兼容性

插件版本电容版本状态
0.x.x (中文(简体) )>=8.x.x积极支持

安装

你可以用我们的 AI 辅助设置 以安装插件. 添加数据 超级技能 至您的 AI 工具,使用以下命令:

npx skills add capawesome-team/skills --skill capacitor-plugins

然后使用下列提示:

 Use the `capacitor-plugins` skill from `capawesome-team/skills` to install the `@capawesome/capacitor-permissions` plugin in my project.

如果你喜欢 手动设置,通过运行以下命令来安装插件,并遵循下面的平台特定指令:

npm install @capawesome/capacitor-permissions
npx cap sync

请注意: 插件本身确实如此 没有 声明任何权限和是否 没有 需要任何 Info.plist 密钥。 您的应用程序必须声明它实际使用的权限( 见下文) 。 这样, 您的应用程序不需要请求权限 .

机器人

权限

将您要检查或请求的权限的列表条目添加到您的 AndroidManifest.xml 文档 application 标签。 如果未宣布许可,则 request(...) 方法以清晰的错误消息拒绝.

权限需要列出的条目
BLUETOOTHandroid.permission.BLUETOOTH_SCAN, (中文(简体) ), android.permission.BLUETOOTH_CONNECT
CALENDARandroid.permission.READ_CALENDAR, (中文(简体) ), android.permission.WRITE_CALENDAR
CAMERAandroid.permission.CAMERA
CONTACTSandroid.permission.READ_CONTACTS, (中文(简体) ), android.permission.WRITE_CONTACTS
LOCATIONandroid.permission.ACCESS_COARSE_LOCATION, (中文(简体) ), android.permission.ACCESS_FINE_LOCATION
LOCATION_ALWAYSandroid.permission.ACCESS_BACKGROUND_LOCATION (加上 LOCATION 条目)
MICROPHONEandroid.permission.RECORD_AUDIO
MOTIONandroid.permission.ACTIVITY_RECOGNITION
NOTIFICATIONSandroid.permission.POST_NOTIFICATIONS
PHOTOSandroid.permission.READ_MEDIA_IMAGES, (中文(简体) ), android.permission.READ_MEDIA_VISUAL_USER_SELECTED, (中文(简体) ), android.permission.READ_EXTERNAL_STORAGE (最大 SDK 版本) 32(中文(简体) )
REMINDERS无法在Android上找到.

示例数字 :

<!-- Required if you want to use the `BLUETOOTH` permission. -->
<uses-permission android:name="android.permission.BLUETOOTH_SCAN" android:usesPermissionFlags="neverForLocation" />
<uses-permission android:name="android.permission.BLUETOOTH_CONNECT" />
<!-- Required if you want to use the `CALENDAR` permission. -->
<uses-permission android:name="android.permission.READ_CALENDAR" />
<uses-permission android:name="android.permission.WRITE_CALENDAR" />
<!-- Required if you want to use the `CAMERA` permission. -->
<uses-permission android:name="android.permission.CAMERA" />
<!-- Required if you want to use the `CONTACTS` permission. -->
<uses-permission android:name="android.permission.READ_CONTACTS" />
<uses-permission android:name="android.permission.WRITE_CONTACTS" />
<!-- Required if you want to use the `LOCATION` or `LOCATION_ALWAYS` permission. -->
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<!-- Required if you want to use the `LOCATION_ALWAYS` permission. -->
<uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION" />
<!-- Required if you want to use the `MICROPHONE` permission. -->
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<!-- Required if you want to use the `MOTION` permission. -->
<uses-permission android:name="android.permission.ACTIVITY_RECOGNITION" />
<!-- Required if you want to use the `NOTIFICATIONS` permission. -->
<uses-permission android:name="android.permission.POST_NOTIFICATIONS" />
<!-- Required if you want to use the `PHOTOS` permission. -->
<uses-permission android:name="android.permission.READ_MEDIA_IMAGES" />
<uses-permission android:name="android.permission.READ_MEDIA_VISUAL_USER_SELECTED" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" android:maxSdkVersion="32" />

iOS系统

隐私描述

将您想要请求的权限的用法描述密钥添加到 ios/App/App/Info.plist 文档。 如果缺少密钥,则 request(...) 方法以清晰的错误消息拒绝.

权限需要的Info.plist 密钥
BLUETOOTHNSBluetoothAlwaysUsageDescription
CALENDARNSCalendarsFullAccessUsageDescription (iOS 17+), (中文(简体) ), NSCalendarsUsageDescription (16岁以上)
CAMERANSCameraUsageDescription
CONTACTSNSContactsUsageDescription
LOCATIONNSLocationWhenInUseUsageDescription
LOCATION_ALWAYSNSLocationAlwaysAndWhenInUseUsageDescription, (中文(简体) ), NSLocationWhenInUseUsageDescription
MICROPHONENSMicrophoneUsageDescription
MOTIONNSMotionUsageDescription
NOTIFICATIONS无
PHOTOSNSPhotoLibraryUsageDescription
REMINDERSNSRemindersFullAccessUsageDescription (iOS 17+), (中文(简体) ), NSRemindersUsageDescription (16岁以上)

示例数字 :

<key>NSCameraUsageDescription</key>
<string>The camera is used to take photos.</string>
<key>NSMicrophoneUsageDescription</key>
<string>The microphone is used to record audio.</string>

说明:由于插件引用了所有支持权限的系统框架,App Store Connect可能会要求您在上传您的应用程序时提供额外的使用描述,即使您没有请求这些权限.

配置

此插件不需要配置 .

使用量

以下示例显示如何检查一个或多个权限的状态以及如何向用户请求.

请检查一个或多个权限的状态

使用 check(...) 方法读取一个或多个权限的当前状态。 这种方法从不显示权限提示,因此随时可以安全调用,例如构建登入或设置屏幕:

import { Permission, Permissions } from '@capawesome/capacitor-permissions';

const checkPermissions = async () => {
  const { statuses } = await Permissions.check({
    permissions: [Permission.Camera, Permission.Microphone],
  });
  return statuses;
};

请求一个或多个权限

使用 request(...) 用于提醒用户获取一个或多个权限的方法。 已经授予或无法请求在当前平台上的权限不再请求;在这种情况下,会返回当前状态. 在网络上,只有 NOTIFICATIONS 请求权限 :

import { Permission, Permissions } from '@capawesome/capacitor-permissions';

const requestPermissions = async () => {
  const { statuses } = await Permissions.request({
    permissions: [Permission.Camera, Permission.Microphone],
  });
  return statuses;
};

API 密码

检查(...)

check(options: CheckOptions) => Promise<CheckResult>

请检查一个或多个权限的当前状态 .

此方法从未显示权限提示 .

参数类型
optionsCheckOptions

回返情况: Promise<CheckResult>

自: 0.1.0 (中文(简体) )


请求(...)

request(options: RequestOptions) => Promise<RequestResult>

请用户提供一个或多个权限 .

已经授予或无法请求的权限 在当前平台上不再请求。 在这种情况下, 返回当前权限状态.

在Android上,必须在 AndroidManifest.xml 您的应用程序文件 。 否则,该呼吁被拒绝.

在iOS上,必须在 Info.plist 您的应用程序文件 。 否则,该呼吁被拒绝.

在网络上,只有 NOTIFICATIONS 可以请求权限. 对于所有其他权限,当前状态自 浏览器显示相应的权限提示 网络API首次被使用.

参数类型
optionsRequestOptions

回返情况: Promise<RequestResult>

自: 0.1.0 (中文(简体) )


接口

检查结果

Prop类型说明自兹
statusesPermissionStatus[]检查权限的状态与提供的权限顺序相同.0.1.0 (中文(简体) )

权限状态

Prop类型说明自兹
permissionPermission检查或要求的许可 .0.1.0 (中文(简体) )
statePermissionState许可状态.0.1.0 (中文(简体) )

检查选项

Prop类型说明自兹
permissionsPermission[]检查权限 .0.1.0 (中文(简体) )

请求结果

Prop类型说明自兹
statusesPermissionStatus[]所请求的许可状态与所提供的许可顺序相同.0.1.0 (中文(简体) )

请求选项

Prop类型说明自兹
permissionsPermission[]请求权限 .0.1.0 (中文(简体) )

类型异名

权限状态

'prompt' | 'prompt-with-rationale' | 'granted' | 'denied'

数字

权限

成员数值说明自兹
Bluetooth'BLUETOOTH'权限 要使用蓝牙。 在Android 12(API 31级)上,这包括: BLUETOOTH_SCAN 财务报告和审定财务报表 BLUETOOTH_CONNECT 权限。 对于更古老的Android版本,不需要运行时间许可,状态总是 granted。在网络上,此权限不可用.0.1.0 (中文(简体) )
Calendar'CALENDAR'权限 来读写日历事件。 在iOS 17 上及其后,只写访问被报告为 limited。在网络上,此权限不可用.0.1.0 (中文(简体) )
Camera'CAMERA'权限 用摄像机.0.1.0 (中文(简体) )
Contacts'CONTACTS'权限 用于读取和写出联系人。 关于iOS 18, 以及后来, 有限访问被报告为 limited。在网络上,此权限不可用.0.1.0 (中文(简体) )
Location'LOCATION'权限 在应用程序使用时访问该位置。 在Android 12(API 第31关)上,以及后来,用户可能只允许近似位置访问. 在这种情况下,该州仍被报告为 granted。 。 。 .0.1.0 (中文(简体) )
LocationAlways'LOCATION_ALWAYS'权限 即使应用程序处于背景状态,也可以访问该位置。 只有在 LOCATION 已经获得许可。 网络上没有此权限 .0.1.0 (中文(简体) )
Microphone'MICROPHONE'权限 用麦克风.0.1.0 (中文(简体) )
Motion'MOTION'权限 获取运动和健身数据。 在Android 10(API 29级)上,这包括: ACTIVITY_RECOGNITION 允许。 对于更古老的Android版本,不需要运行时间许可,状态总是 granted。在网络上,此权限不可用.0.1.0 (中文(简体) )
Notifications'NOTIFICATIONS'权限 以显示通知。 在Android 13(API 33级)上,这包括: POST_NOTIFICATIONS 允许。 对于更古老的Android版本,不需要运行时间许可,状态总是 granted。 。 。 .0.1.0 (中文(简体) )
Photos'PHOTOS'权限 访问相片库。 在Android 14(API 第34级)以及后来和iOS上,部分访问相片库被报告为 limited。在网络上,此权限不可用.0.1.0 (中文(简体) )
Reminders'REMINDERS'权限 读取和写出提醒。 仅在iOS上可用.0.1.0 (中文(简体) )

平台行为

下表总结了每个平台上每个权限的行为:

权限机器人iOS系统网页
BLUETOOTH封面 BLUETOOTH_SCAN 财务报告和审定财务报表 BLUETOOTH_CONNECT 在Android 12+上出现. 在旧版本,总是 granted。 。 。 .覆盖核心蓝牙授权.永远 unavailable。 。 。 .
CALENDAR封面 READ_CALENDAR 财务报告和审定财务报表 WRITE_CALENDAR。 。 。 .在iOS 17+上,只写访问被报告为 limited。 。 。 .永远 unavailable。 。 。 .
CAMERA封面 CAMERA。 。 。 .盖相机授权.检查已支持 。 请求返回当前状态 .
CONTACTS封面 READ_CONTACTS 财务报告和审定财务报表 WRITE_CONTACTS。 。 。 .在iOS 18+上,有限访问报告为: limited。 。 。 .永远 unavailable。 。 。 .
LOCATION封面 ACCESS_COARSE_LOCATION 财务报告和审定财务报表 ACCESS_FINE_LOCATION报告为 granted 如果至少已经允许大致进入地点.涵盖在使用时的位置授权.检查已支持 。 请求返回当前状态 .
LOCATION_ALWAYS封面 ACCESS_BACKGROUND_LOCATION 在Android 10+上出现. 在旧版本,行为像 LOCATION。 。 。 .覆盖总是位置授权。 iOS只显示一次升级提示.永远 unavailable。 。 。 .
MICROPHONE封面 RECORD_AUDIO。 。 。 .覆盖麦克风授权.检查已支持 。 请求返回当前状态 .
MOTION封面 ACTIVITY_RECOGNITION 在Android 10+上出现. 在旧版本,总是 granted。 。 。 .包括活动授权。 需要一个真正的设备.永远 unavailable。 。 。 .
NOTIFICATIONS封面 POST_NOTIFICATIONS 安卓13号+ 在旧版本,总是 granted。 。 。 .包括通知授权.检查和请求支持 .
PHOTOS封面 READ_MEDIA_IMAGES (和 READ_MEDIA_VISUAL_USER_SELECTED)在Android 13+上,并 READ_EXTERNAL_STORAGE 在旧版本。 部分访问报告为 limited。 。 。 .部分访问报告为 limited。 。 。 .永远 unavailable。 。 。 .
REMINDERS永远 unavailable。 。 。 .包括提醒授权.永远 unavailable。 。 。 .

请求背景位置

这个 LOCATION_ALWAYS 仅应在 LOCATION 已授予许可 :

  1. 请 LOCATION 并解释为什么您需要访问位置.
  2. 批准后,请 LOCATION_ALWAYS 允许.

在Android 11上及后期,系统没有显示背景位置的提示. 相反,用户被带到系统设置中来选择"Allow all the time"选项. 如果 LOCATION 尚未获得许可,该系统立即拒绝这项请求.

在iOS上,系统只显示从被使用时到总访问一次的升级提示. 如果用户已经做出决定,则返回当前状态.

从被拒绝的权限收回

如果许可是在 denied 状态,无法再从应用程序中请求它 。 在这种情况下,您可以使用 设置启动器 插件 :

import { SettingsLauncher } from '@capawesome/capacitor-settings-launcher';

const openAppSettings = async () => {
  await SettingsLauncher.openAppSettings();
};

App 跟踪透明度

App Track Communications 权限被故意不在此插件中. 使用 App 跟踪透明度 插件替换 .

财务问题

此插件与其他类似插件有何不同?

它将许多设备权限置于一个统一,完全打入的API下——蓝牙,日历,相机,联系人,位置,背景位置,麦克风,运动,通知,相片和提醒——所以你检查和要求它们全部在一个地方. 这个 check(...) 方法从不触发系统提示,插件本身就宣布没有权限,所以您的应用只传送它实际使用的程序。 它的手工制作非常小心,跨越了Android,iOS和Web(部分),并与最新的Capacitor版本保持同步.

这是否 check 方法触发许可提示 ?

不,那个 check(...) 方法从不显示权限提示。 它只读取给定权限的当前状态,因此可以在任何时候安全地调用它,例如构建一个登入或设置屏幕.

为什么 request 用错误拒绝方法 ?

在Android上,必须在 AndroidManifest.xml 您的应用程序文件 。 在iOS上,必须在 Info.plist 您的应用程序文件 。 如果缺少声明 request(...) 方法以清晰的错误消息拒绝。 见 安装 每个许可所需的条目.

我需要在应用程序中声明所有支持的权限吗?

不,插件本身不声明任何权限,也不要求任何Info.plist密钥. 您的应用程序只声明它实际使用的权限 。 这样, 您的应用程序不需要请求权限 .

我如何请求访问背景位置?

请 LOCATION 首先,一旦获得许可,则请求 LOCATION_ALWAYS 允许。 在Android 11上及后期,系统不显示提示背景位置;而是将用户带到系统设置中选择"Allow all the time"选项. 在iOS上,系统只显示从被使用时到总访问一次的升级提示.

如果拒绝许可我该怎么办?

如果许可是在 denied 状态,无法再从应用程序中请求它 。 在这种情况下,您可以使用 设置启动器 插件让他们可以手动授予权限 .

网络上支持哪些权限 ?

在网络上,只有 NOTIFICATIONS 可以检查和请求权限。 这个 CAMERA, (中文(简体) ), LOCATION 财务报告和审定财务报表 MICROPHONE 权限支持检查,同时请求返回当前状态,因为浏览器首次使用相应的网页API时会显示权限提示。 所有其他许可均报告为 unavailable见 平台行为 详细情况.

通讯

随时更新有关卡帕韦索姆、Capacitor和Ionic生态系统的最新消息和最新消息,因为我们 《卡帕索克通讯》。 。 。 .

更改日志

见 变动情况。 。 。 .

许可证

见 自由主义。 。 。 .

版本与发布记录

@capawesome/capacitor-permissions 共发布 4 个版本,首次发布于 2026/07/08;过去 12 个月发布了 4 个版本。最新版本附带 npm provenance 构建来源证明,可追溯到公开的 CI 构建记录。

版本发布日期距今
0.1.2latest2026/09/022 个月前
0.1.12026/07/153 个月前
0.1.02026/07/143 个月前
0.0.12026/07/084 个月前

关于 @capawesome/capacitor-permissions 的常见问题

@capawesome/capacitor-permissions 是什么?

Capacitor插件可以检查和请求设备权限,在Android,iOS,和Web上有一个统一的API.

如何安装 @capawesome/capacitor-permissions?

在项目目录运行 npm install @capawesome/capacitor-permissions,或使用 pnpm add / yarn add / bun add。它还需要宿主项目提供 peer 依赖:@capacitor/core(>=8.0.0)。npm 7 及以上与 pnpm 8 及以上默认会自动安装必需的 peer 依赖,Yarn 需要手动安装。

@capawesome/capacitor-permissions 支持 TypeScript 吗?

支持。包内自带 TypeScript 类型声明(package.json 声明了 types 入口),安装后即可获得类型提示,无需再安装 @types 包。

@capawesome/capacitor-permissions 支持 ESM 还是 CommonJS?

同时提供 ES Module 与 CommonJS 入口,import 和 require() 都可以使用,打包工具会自动选择合适的版本。

@capawesome/capacitor-permissions 可以商用吗?

@capawesome/capacitor-permissions 使用 MIT 许可。宽松许可:允许商业使用、修改和再分发,通常只需在分发时保留原版权与许可声明。以上为概括,不构成法律意见,请以许可原文为准。

@capawesome/capacitor-permissions 的下载量有多少?

根据 npm 官方下载统计,@capawesome/capacitor-permissions 在 2026/10/09 – 2026/11/07 这 30 天内被下载 6,397 次,日均约 213 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入,适合横向比较热度,不能直接等同于使用人数。

@capawesome/capacitor-permissions 还在维护吗?

最新版本 0.1.2 发布于 2026/09/02(2 个月前);至今共发布 4 个版本,其中过去 12 个月发布了 4 个;首次发布于 2026/07/08。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。