Skip to content

Perm Listener 权限申请监听

查看 sn-perm-listener 的 2.0 版本差异

概述

监听系统权限申请,在系统授权弹窗出现的同时,展示带打开 / 消失动画的原生说明弹层,向用户说明权限用途。只在单页面生效(进入页面注册、离开页面注销);当权限已授予或永久拒绝后,不再弹出。

v2 起由 UI 组件形态改为 API 插件形态,不再使用 <sn-perm-listener> 组件标签,通过 sinle-ui 的 snu.setPermTips / snu.setPermTipsStyle / snu.registerPermListener / snu.unregisterPermListener / snu.hidePermTips 调用。插件底层也直接导出 registerPermListener / unregisterPermListener / setPermTips / setPermTipsStyle / hidePermTips 五个方法,使用方法一致。

  • 内容支持简化模式title / content / iconicon 为 24×24 viewBox 的 svg path d 值)与 HTML 富文本模式html,Android 原生 TextView 渲染);同时设置 htmltitle / content / icon 时 HTML 优先。
  • 弹层样式高度可配置(背景色、圆角、边距、标题 / 内容 / 图标颜色与字号、间距、最大宽度、动画时长),展示中更新样式会实时刷新。
  • Android 端完整实现(原生 PopupWindow 弹层 + 渐隐缩放动画);Web 端为空实现(浏览器无系统权限弹窗监听,调用不报错、无效果)。

兼容性

WebAndroid
×

更多演示请下载 demo 查看


snu.setPermTips()

设置权限说明内容

为各权限配置说明弹窗内容。key 为权限全名(如 android.permission.CAMERA),value 为 SnPermTipConfig 说明对象。

兼容性

WebAndroid
×

属性

名称类型必备默认值描述
tipsMap<string, SnPermTipConfig>-权限名到说明内容的映射

示例

typescript
snu.setPermTips(new Map<string, SnPermTipConfig>([
	['android.permission.CAMERA', {
		title: '正在请求相机权限',
		content: '仅用于扫描二维码,不会将您的任何隐私数据上传云端',
		icon: 'M12 15.2a3.2 3.2 0 1 0 0-6.4 3.2 3.2 0 0 0 0 6.4zM9 2 ...'
	}],
	['android.permission.READ_CALENDAR', {
		html: '<h4>正在请求日历权限</h4><font color="#999999" size="2">仅用于辅助填写日程</font>'
	}]
]))

SnPermTipConfig

SnPermTipConfigsnu.setPermTips() 中每条权限说明的配置对象(同时设置 htmltitle / content / icon 时 HTML 优先)。

名称类型必填描述
htmlStringHTML 富文本内容(Android 原生 TextView 渲染)
titleString简化模式:标题文本
contentString简化模式:内容文本
iconString简化模式:图标 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> 等。


snu.setPermTipsStyle()

设置说明弹层样式

随时可更新,弹层展示中会实时刷新。颜色字段支持 $主题色 简写,尺寸字段支持 $ 简写(经 sinle-ui 的 resolveColor / resolveSize 处理,随主题 / 乘数联动)。

兼容性

WebAndroid
×

属性

名称类型必备默认值描述
styleSnPermTipsStyleConfig-弹层样式配置对象

setPermTipsStyle 配置:position'top' | 'bottom')、bgColorradiuspaddingmargintitleColor/titleSizecontentColor/contentSizeiconColor/iconSizespacingmaxWidthaniTime

返回值

示例

typescript
snu.setPermTipsStyle({
	position: 'top',
	radius: '$12',
	padding: '$16px $20px',
	margin: '$12px',
	spacing: '$10',
	aniTime: '$250'
})

SnPermTipsStyleConfig

SnPermTipsStyleConfigsnu.setPermTipsStyle() 的样式配置对象。

名称类型必填描述
positionString弹层贴靠位置:'top' 顶部 | 'bottom' 底部,默认 'top'
bgColorString弹层背景色,默认主题前景色($front
radiusString | Number背景圆角(px),默认 $12
paddingString | Number内边距,CSS 风格空格分隔: / 上下 左右 / 上 右 下 左,支持 px 或纯数字,默认 '$16px $20px'
marginString | Number弹层距屏幕边缘边距,格式同上;position'top' 时第一个值生效于弹层与状态栏之间,默认 '$12px'
titleColorString标题颜色,默认主题标题色($title
titleSizeString | Number标题字号(px),默认 $16
contentColorString内容颜色,默认主题正文色($text
contentSizeString | Number内容字号(px),默认 $14
iconColorString图标着色,默认主题标题色($title
iconSizeString | Number图标尺寸(px),默认 $22
spacingString | Number行与行、图标与文本的间距(px),默认 $10
maxWidthString | Number弹层最大宽度(px),0 表示不限制(弹层固定为屏幕宽度的 85%);设置后取两者较小值,默认 0
aniTimeString | Number打开 / 消失动画时长(ms),默认 $250


snu.registerPermListener()

注册权限申请监听

注册系统权限申请监听,并接管说明弹窗的显示 / 隐藏。

兼容性

WebAndroid
×

属性

名称类型必备默认值描述
listenerPermListener | null-权限监听回调对象,传 null 亦可

返回值

示例

typescript
snu.registerPermListener({
	onRequest: (permissions: Array<string>): void => {
		console.log('发起申请:', permissions)
	},
	onConfirm: (permissions: Array<string>): void => {
		console.log('系统授权弹窗弹出:', permissions)
	},
	onComplete: (res: UTSJSONObject): void => {
		console.log('申请完成:', res['android.permission.CAMERA'])
	}
})

snu.unregisterPermListener()

取消权限申请监听

取消监听并关闭当前说明弹层。

兼容性

WebAndroid
×

属性

名称类型必备默认值描述
listenerPermListener | null-传入 null 即可

返回值

示例

typescript
onUnload(() => {
	snu.unregisterPermListener(null)
})

snu.hidePermTips()

立即隐藏说明弹层

立即(带动画)隐藏当前说明弹层。

兼容性

WebAndroid
×

属性

返回值

示例

typescript
snu.hidePermTips()

PermListener

PermListener 为权限申请监听回调对象,三个回调均可选。

名称类型必填描述
onRequest(permissions: Array<string>) => Void业务代码发起权限申请时触发,permissions 为申请权限数组
onConfirm(permissions: Array<string>) => Void系统授权弹窗弹出时触发(说明弹层同步展示)
onComplete(permissions: UTSJSONObject) => Void权限申请完成时触发,值为权限名到 'grant' / 'denied' 的映射(说明弹层同步隐藏)

使用 MIT 协议