解决 uniapp 开发中的相机相册权限申请同步告知目的问题(兼容 Android 13)| 华为应用商店上架解决方案

本文将分享如何在 uniapp 开发中申请相机和相册权限时,解决应用商店要求同步告知权限申请目的的问题,并兼容 Android 13。

背景

在某一次版本迭代中,上架华为应用商店审核不通过,原因是申请相机、相册权限时「未同步告知权限申请的使用目的」。

审核方给出的修改建议如下:

修改建议:APP在申请敏感权限时,应同步说明权限申请的使用目的,包括但不限于申请权限的名称、服务的具体功能、用途;告知方式不限于弹窗、蒙层、浮窗、或者自定义操作系统权限弹框等。请排查应用内所有权限申请行为,确保均符合要求。

特别提示:需在申请权限的同时/过程中同步告知目的。

在申请权限的同时给用户同步告知目的,建议申请目的与“权限弹窗”需同屏展示。

分析

简而言之,申请权限之前,需要同步显示“提示”,告知用户权限的使用目的,不能提前告知,也不能在申请权限之后再告知。

  • 因为不能每次都显示申请目的,如何判断当前是否已经拥有权限?
  • 在用户未对权限弹窗进行操作时,如何确保告知目的不会消失,并且与权限弹窗同屏显示?

难点:

  1. 判断权限是否已授权
  2. 权限申请流程
  3. 实现持久性弹窗

解决

由于主要针对安卓应用商店,这里只考虑安卓的情况,iOS部分较为简单。

回到难点上,

如何判断当前有无权限

在 uniapp 中可以使用 plus.navigator.checkPermission(permission) API 检查运行环境的权限,入参 permission 是权限的名称。其中,相机、相册的权限名称分别为:

  • android.permission.CAMERA
  • android.permission.READ_EXTERNAL_STORAGE

该 API 返回一个字符串,表示权限的授权状态。authorized 代表已被用户授权使用此权限。其他返回值请查阅 此处

因此,我们只需要判断返回的权限状态是否为 authorized,如果是,则表示已有权限,无需继续申请;否则,需要申请对应权限。

申请权限

使用 plus.android.requestPermissions(Array[String] permissions, AndroidSuccessCallback successCb, AndroidErrorCallback errorCB) API 可以向系统请求权限。其中,permissions 是申请的权限列表,successCb 是申请权限成功后的回调函数,errorCB 是失败回调函数(通常用于处理参数错误的情况)。

  • 成功回调函数 successCb 包含三个参数:
    • granted - 已获取的权限列表(字符串数组);
    • deniedPresent - 被临时拒绝的权限列表(字符串数组);
    • deniedAlways - 被永久拒绝的权限列表(字符串数组)。

官方使用示例:

// 申请定位权限
function requestLocation(){
   
	plus.android.requestPermissions(['android.permission.ACCESS_FINE_LOCATION'], function(e){
   
		if(e.deniedAlways.length>0){
   	//权限被永久拒绝
			// 弹出提示框解释为何需要定位权限,引导用户打开设置页面开启
			console.log('Always Denied!!! '+e.deniedAlways.toString());
		}
		if(e.deniedPresent.length>0){
   	//权限被临时拒绝
			// 弹出提示框解释为何需要定位权限,可再次调用plus.android.requestPermissions申请权限
			console.log('Present Denied!!! '+e.deniedPresent.toString
### 腾讯云 DeepSeek 集成使用指南 腾讯云 TI 平台为用户提供了一个便捷的方式来进行 DeepSeek-R1 大模型的私有化部署和调用。通过该平台,用户不仅可以获得免费体验的机会,还能享受到开放的 API 接口服务,便于将此先进的人工智能技术融入自身的业务环境中[^2]。 #### 获取访问权限 为了开始集成工作,首先需要注册并登录到腾讯云账户,在 TI 平台上申请获取 DeepSeek 的使用以及相开发工具包 (SDK) 和 API 文档链接。 #### 准备环境配置 确保本地开发环境已经安装 Python 解释器及相关依赖库,并按照官方给出的操作手册完成必要的设置步骤,比如创建虚拟环境、激活许可证等操作。 #### 实现接口对接 下面是一个简单的 Python 代码片段用于展示如何调用 DeepSeek 提供的服务: ```python import requests def call_deepseek_api(text_input): url = "https://api.tencentcloud.com/deepseek" headers = { 'Content-Type': 'application/json', 'Authorization': 'Bearer YOUR_ACCESS_TOKEN' } payload = {"text": text_input} response = requests.post(url, json=payload, headers=headers) if response.status_code == 200: result = response.json() return result['output'] else: raise Exception(f"Error calling API: {response.text}") ``` 上述函数 `call_deepseek_api` 可以用来发送请求给远程服务器处理输入文本数据,并返回经过分析后的结果字符串。需要注意的是这里的 URL 地址当替换成为实际使用的端点地址;同样地,“YOUR_ACCESS_TOKEN”也需要替换成有效的认证令牌。 对于更加全面的学习资料和技术支持,建议参考 LangChain 官方文档以及其他在线资源如 GitBook 或 GitHub 上关于 LangChain 的教程和案例研究,这些都将极大地促进开发者们更好地理解和运用这项强大的自然语言处理能力[^1]。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值