更新记录

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#AARRGGBBrgb()rgba()
radius number 12 背景圆角 px
padding string '16px 20px' 内边距,CSS 风格空格分隔: / 上下 左右 / 上 右 下 左,支持 px 或纯数字
margin string '12px 12px' 弹层距屏幕边缘边距,格式同上(positiontop 时第一个值生效于弹层与状态栏之间)
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:空实现(浏览器无系统权限弹窗监听,调用不报错、无效果)

隐私、权限声明

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

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

插件不采集任何数据

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

许可协议

MIT协议

暂无用户评论。