 
  
   English 
 app-android平台,可使用本API监听应用权限申请确认框的弹出和关闭。不管是哪处的业务代码在申请权限,当弹出和关闭权限申请确认框时均会触发本监听事件。
华为应用市场审核时要求:APP在调用终端权限时,应同步告知用户申请该权限的目的。此时即可使用本API,在app.uvue里全局监听。
创建监听对象后,返回RequestPermissionListener,然后调起其的onConfirm和onComplete。
创建一个监听权限申请的 RequestPermissionListener 对象。
平台差异说明
HBuilderX (4.0+) android 平台支持
| 元服务 | 
|---|
| x | 
| HarmonyOS | 
|---|
| x | 
注意:HBuilderX 4.01 Vue2项目需要使用自定义基座测试监听权限申请的功能,标准基座暂不支持测试。
RequestPermissionListener 对象的方法列表
| 方法 | 参数 | 说明 | 
|---|---|---|
| onRequest | callback | 监听申请系统权限 | 
| onConfirm | callback | 监听弹出系统权限授权框 | 
| onComplete | callback | 监听权限申请完成 | 
| stop | 取消所有监听 | 
示例
<template>
	<view>
		<view class="permission-alert" id="permission-alert" :style="{'transform':isPermissionAlertShow ? 'translateY(0)':'translateY(-250rpx)'}">
			<text style="font-size: 20px;margin-bottom: 10px;margin-top: 5px; display: block;">手机状态权限申请说明:</text>
			<text style="color: darkgray;">uni-app正在申请手机状态权限,允许或拒绝均不会获取任何隐私信息。</text>
		</view>
		<button @click="requestPermission">点击申请日历权限</button>
	</view>
</template>
<script>
	export default {
		data() {
			return {
				isPermissionAlertShow: false,
				//permissionListener: null
			}
		},
		onReady() {
			this.watchPermission()
		},
		onUnload() {
			if (this.permissionListener) {
				this.permissionListener.stop()
			}
		},
		methods: {
			watchPermission() {
				this.permissionListener = uni.createRequestPermissionListener();
				this.permissionListener.onConfirm((e) => {
					this.isPermissionAlertShow = true
				});
				this.permissionListener.onComplete((e) => {
					this.isPermissionAlertShow = false
				});
			},
			requestPermission() {
				plus.android.requestPermissions(["android.permission.READ_CALENDAR"], (e) => {
				}, (e) => {
				})
			}
		}
	}
</script>
<style>
	.permission-alert {
		width: 650rpx;
		height: 200rpx;
		margin: 20rpx 40rpx;
		position: absolute;
		top: 0px;
		z-index: 3;
		border-radius: 5px;
		transition-property: transform;
		transition-duration: 200ms;
		background-color: white;
		padding: 10rpx;
	}
</style>
iOS的权限申请原因,是在manifest或info.plist里配置的。
Android没有在系统层面提供这套机制,但一些应用商店(如华为),又要求申请权限时弹框说明原因。
虽然uni.createRequestPermissionListener可以监听权限申请,但前端弹框的层级较低,无法正常显示权限申请原因。
所以DCloud提供了一个插件,可以在原生层面给出文字提示:
onConfirm不会触发。onComplete可能会触发多次。