更新记录
1.0.1(2026-08-31) 下载此版本
- 首次发布
平台兼容性
uni-app x(5.23)
| Chrome | Safari | Android | iOS | 鸿蒙 | 微信小程序 |
|---|---|---|---|---|---|
| × | × | √ | × | × | × |
sn-perm-listener 权限申请说明弹窗
监听系统权限申请,在系统授权弹窗出现的同时,展示带打开/消失动画的原生说明弹层,向用户说明权限用途。
API
registerPermListener(listener)
注册系统权限申请监听,并接管说明弹窗的显示/隐藏。
PermListener 属性:
| 名称 | 类型 | 描述 | 必填 |
|---|---|---|---|
| onRequest | (permissions: Array<string>) => void |
业务代码发起权限申请时触发 | 否 |
| onConfirm | (permissions: Array<string>) => void |
系统授权弹窗弹出时触发(说明弹层同步展示) | 否 |
| onComplete | (permissions: UTSJSONObject) => void |
权限申请完成时触发,值为权限名到 grant/denied 的映射,说明弹层同步隐藏 |
否 |
unregisterPermListener(listener)
取消监听并关闭说明弹层。传 null 即可。
setPermTips(tips)
设置各权限的说明内容。tips: UTSJSONObject,key 为权限全名(如 android.permission.CAMERA),value 为说明对象(同时设置 html 与 title/content/icon 时 HTML 优先):
| 字段 | 类型 | 描述 |
|---|---|---|
| html | string | HTML 富文本内容(Android 原生 TextView 渲染) |
| title | string | 简化模式:标题文本 |
| content | string | 简化模式:内容文本 |
| icon | string | 简化模式:图标 svg path d 值(24×24 viewBox) |
HTML 支持的标签:<b> <i> <u> <p> <div> <h1>~<h6> <ul> <ol> <li> <br> <font color="..." size="..."> <big> <small> <sub> <sup> <tt> <s> 等。
setPermTipsStyle(style)
设置说明弹层样式(随时可更新,弹层展示中会实时刷新)。
| 名称 | 类型 | 默认值 | 描述 |
|---|---|---|---|
| position | 'top' \| 'bottom' |
'top' |
弹层贴靠位置 |
| bgColor | string | '#FFFFFF' |
弹层背景色(支持 #RRGGBB、#AARRGGBB、rgb()、rgba()) |
| radius | number | 12 |
背景圆角 px |
| padding | string | '16px 20px' |
内边距,CSS 风格空格分隔:上 / 上下 左右 / 上 右 下 左,支持 px 或纯数字 |
| margin | string | '12px 12px' |
弹层距屏幕边缘边距,格式同上(position 为 top 时第一个值生效于弹层与状态栏之间) |
| titleColor | string | '#333333' |
标题颜色 |
| titleSize | number | 16 |
标题字号 px |
| contentColor | string | '#666666' |
内容颜色 |
| contentSize | number | 14 |
内容字号 px |
| iconColor | string | '#333333' |
图标着色 |
| iconSize | number | 22 |
图标尺寸 px |
| spacing | number | 10 |
行与行、图标与文本的间距 px |
| maxWidth | number | 0 |
弹层最大宽度 px,0 表示不限制(弹层固定为屏幕宽度的 85%);设置后取两者较小值 |
| aniTime | number | 250 |
打开/消失动画时长 ms |
hidePermTips()
立即(带动画)隐藏当前说明弹层。
权限图标 svg path 示例
icon 传入 24×24 viewBox 的 svg path d 值,例如相机:
M12 15.2a3.2 3.2 0 1 0 0-6.4 3.2 3.2 0 0 0 0 6.4zM9 2L7.17 4H4c-1.1 0-2 .9-2 2v12c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V6c0-1.1-.9-2-2-2h-3.17L15 2H9zm3 15c-2.76 0-5-2.24-5-5s2.24-5 5-5 5 2.24 5 5-2.24 5-5 5z
使用示例
import { registerPermListener, unregisterPermListener, setPermTips, setPermTipsStyle } from '@/uni_modules/sn-perm-listener'
onLoad(() => {
// #ifdef APP-ANDROID
setPermTipsStyle({ position: 'top', radius: 12 })
const tips = new UTSJSONObject()
tips['android.permission.CAMERA'] = { title: '正在请求相机权限', content: '仅用于扫描二维码', icon: '...' }
setPermTips(tips)
registerPermListener({
onComplete: (res) => {
console.log(res['android.permission.CAMERA'])
}
})
// #endif
})
onUnload(() => {
// #ifdef APP-ANDROID
unregisterPermListener(null)
// #endif
})
平台差异
- Android:完整实现(原生 PopupWindow 弹层 + 动画)
- Web:空实现(浏览器无系统权限弹窗监听,调用不报错、无效果)

收藏人数:
下载插件并导入HBuilderX
赞赏(0)
下载 1644
赞赏 1
下载 12543668
赞赏 1947
赞赏
京公网安备:11010802035340号