uni-app开发经验分享十二: Android平台应用启动时读写手机存储、访问设备信息(如IMEI)等权限策略及提示信息
Android平台从6.0(API23)开始系统对权限的管理更加严格,所有涉及敏感权限都需要用户授权允许才能获取。
因此一些应用基础业务逻辑需要的权限会在应用启动时申请,并引导用户允许。
读写手机存储权限
应用需要保存运行状态等数据到手机SD卡中,启动时需要获取读写手机存储权限,此权限为基础权限,影响真机运行、wgt升级。
- 注意:此权限目标不是要访问相册,是Android把相册写入权限和存储写入权限合并在一个权限里了。
- 注意:wgt热更新是应用市场不乐见的,不建议明显提示给用户或告知应用市场。
申请读写手机存储需要用户授权,会弹出如下提示框:
- HBuilderX2.4.2及以下版本,用户拒绝此权限则直接退出应用。
- HBuilderX2.4.3+版本,用户拒绝后键会弹出以下提示框引导用户重新允许
- 点击“取消”退出应用;
点击“确定”重新弹出授权框,如果用户已经勾选“不再询问”则打开应用的设置界面。
此提示语可在manifest.json中配置 - HBuilderX2.5.0+开始支持配置应用启动时申请获取手机存储权限,支持以下三种策略
- none
应用启动时不申请 - once
应用第一次启动时申请,用户可以拒绝 - always
应用每次启动都申请,并且用户必须允许,用户拒绝时会弹出以下提示框引导用户重新允许
- none
源码视图配置
打开manifest.json文件,切换到“源码视图”项
- uni-app项目
在"app-plus" -> "distribute" -> "android" 节点下添加 permissionExternalStorage 节点 - 5+ App项目
在 "plus" -> "distribute" -> "google" 节点下添加 permissionExternalStorage 节点
permissionExternalStorage节点数据格式如下:
"permissionExternalStorage": {
"request": "always",
"prompt": "应用保存运行状态等信息,需要获取读写手机存储(系统提示为访问设备上的照片、媒体内容和文件)权限,请允许。"
}
- equest
字符串类型,必填,申请设备信息权限策略,可取值none、once、always。默认值为always。 - prompt
字符串类型,可选,用户拒绝时弹出提示框上的内容。
默认值为:应用保存运行状态等信息,需要获取读写手机存储(系统提示为访问设备上的照片、媒体内容和文件)权限,请允许。
国际化配置参考:https://ask.dcloud.net.cn/article/35860#strings
设置自定义键名称为“dcloud_permission_write_external_storage_message”。
保存后提交云端打包生效
访问设备信息权限
Android平台应用获取设备信息(如IMEI、IMSI等),统计、推送、广告等业务功能依赖这些信息。
此权限不是必选,拒绝此权限不影响App端基座运行。但拥有本权限可以给开发者提供更准确的统计报表。
而申请获取这些信息需要用户授权,会弹出如下提示框:
华为手机应用的设置中权限列表中为“电话”权限
HBuilderX2.3.8+开始支持配置应用启动时申请获取设备信息权限,支持以下三种策略
- none
应用启动时不申请 - once
应用第一次启动时申请,用户可以拒绝 - always
应用每次启动都申请,并且用户必须允许,用户拒绝时会弹出以下提示框引导用户重新允许
- 此提示框删的文本可自定义,参考下面的prompt字段
默认策略为once,即应用第一次启动时申请
源码视图配置
打开manifest.json文件,切换到“源码视图”项
- uni-app项目
在 "app-plus" -> "distribute" -> "android" 节点下添加 permissionPhoneState 节点 - 5+ App项目
在 "plus" -> "distribute" -> "google" 节点下添加 permissionPhoneState 节点
permissionPhoneState节点数据格式如下:
"permissionPhoneState": {
"request": "always",
"prompt": "为保证您正常、安全地使用,需要获取设备识别码(部分手机提示为获取手机号码)使用权限,请允许。"
}
- request
字符串类型,必填,申请设备信息权限策略,可取值none、once、always。默认值为once。 - prompt
字符串类型,可选,用户拒绝时弹出提示框上的内容。
默认值为:为保证您正常、安全地使用,需要获取设备识别码(部分手机提示为获取手机号码)使用权限,请允许。
国际化配置参考:https://ask.dcloud.net.cn/article/35860#strings
设置自定义键名称为“dcloud_permission_read_phone_state_message”。
保存后提交云端打包生效
离线打包提示语配置及弹窗配置。
提示语配置
在主项目的strings.xml中添加如下字段。strings.xml位于 项目目录/src/main/res/values下,如果文件或文件夹不存在,直接新建即可。
存储权限提示语配置
<resources>
<string name="dcloud_permission_write_external_storage_message">存储权限提示语</string>
</resources>
读取手机状态权限配置
<resources>
<string name="dcloud_permission_read_phone_state_message">读取手机状态权限提示语</string>
</resources>
弹窗配置
在androidManifest.xml的application节点下添加如下字段。
存储权限弹窗配置
<application>
<meta-data android:name="DCLOUD_WRITE_EXTERNAL_STORAGE" android:value="once"/>
</application>
value可取值为 none、once、always。
读取手机状态弹窗配置
<application>
<meta-data android:name="DCLOUD_READ_PHONE_STATE" android:value="once"/>
</application>
alue可取值为 none、once、always。
补充
沟通发现,部分开发者在main.js里面调用了plus.device.getInfo这类方法。
但是其实API操作与permissionExternalStorage设置无关,permissionExternalStorage用于设置应用内部逻辑是否申请访问SD卡权限
开发者是因为在启动的时候调用API触发了权限申请,误以为permissionExternalStorage设置无效(其实设置是生效的)。
其它API操作会根据功能需求来申请权限,比如操作系统相册也会申请访问SDK卡权限、定位操作会申请定位权限等。
转载于https://ask.dcloud.net.cn/article/36549
uni-app开发经验分享十二: Android平台应用启动时读写手机存储、访问设备信息(如IMEI)等权限策略及提示信息的更多相关文章
- Android应用程序启动时发生AndroidRuntime : ClassNotFoundException for Activity class的解决方法
在android应用程序启动时抛出下面异常导致启动失败:07-09 17:12:35.709: ERROR/AndroidRuntime(3866): Uncaught handler: thread ...
- uni-app开发经验分享十六:发布android版App的详细过程
开发环境 1. Android Studio下载地址:Android Studio官网 OR Android Studio中文社区 2. HBuilderX(开发工具) 3. App离线SDK下载:最 ...
- 分享十二个有用的jQuery代码
分享7个有用的jQuery代码 这篇文章主要介绍了7个有用的jQuery技巧分享,本文给出了在新窗口打开链接.设置等高的列.jQuery预加载图像.禁用鼠标右键.设定计时器等实用代码片段,需要的朋友可 ...
- uni-app开发经验分享十五: uni-app 蓝牙打印功能
最近在做uni-app项目时,遇到了需要蓝牙打印文件的功能需要制作,在网上找到了一个教程,这里分享给大家. 引入tsc.js 简单得引入到自己所需要得页面中去,本次我们只要到了标签模式,他同时还有账单 ...
- Android应用第一次启动时的欢迎界面制作
原理是这样,我们在SharedPreferences中存储一个int型数据,用来代表第几次登录,每次启动时都读取出来判断是不是第一次启动,然后依次判断是否要显示欢迎界面, 具体实现如下: 设置一个欢迎 ...
- Android核心分析之二十二Android应用框架之Activity
3 Activity设计框架 3.1 外特性空间的Activity 我们先来看看,android应用开发人员接触的外特性空间中的Activity,对于AMS来讲,这个Activity就是客服端的 ...
- uni-app开发经验分享十八:对接第三方h5
1.uni-app中对接第三方为了防止跳出app使用了webview <template> <view> <web-view :src="url" @ ...
- uni-app开发经验分享十: 封装request请求
http.js //封装requset,uploadFile和downloadFile请求,新增get和post请求方法 let http = { 'setBaseUrl': (url) => ...
- Android 核心分析之十二Android GEWS窗口管理之基本架构原理
Android GWES之窗口管理之基本构架原理 Android的窗口管理是C/S模式的.Android中的Window是表示Top Level等顶级窗口的概念.DecorView是Window的To ...
随机推荐
- Spring Data JPA 整合Spring 第二篇
主要是在CustomerDao中去写一些代码,在调用Query中去用SQL 例如 public interface CustomerDao extends JpaRepository<Custo ...
- PHP面向对象的学习(封装,继承,多态)
这个文章就是记录 巩固一下PHP的面向对象的部分 ,无非就是封装,继承,多态等等这几部分 这里参考了一位大佬总结的文章:https://www.cnblogs.com/adaia/p/6986576 ...
- 高可用K8S构建3master+3node+keepalived+haproxy
视频地址:https://www.bilibili.com/video/BV1w4411y7Go?p=66 所需安装包在视频评论区 安装准备 系统: CentOS-7-x86_64-Minimal-1 ...
- pygal之掷骰子 - 2颗面数为6的骰子
python之使用pygal模拟掷两颗面数为6的骰子的直方图,包含三个文件,主文件,die.py,dice_visual.py,20200527.svg.其中最后一个文件为程序运行得到的结果. 1,d ...
- List集合转JSONObject
以前写代码喜欢用Map拼接返回去给前端,这样得到的也是一个标准的JSON,今天先不说Map的优缺点,我们就来说说JSONObject的使用,我用的是阿里的fastjson,先上代码,当我们需要嵌套代码 ...
- sql中大于等于小于的写法
由于在mybatis框架的xml中<= , >=解析会出现问题,编译报错,所以需要转译第一种写法: 原符号 < <= > >= & ' "替换符号 ...
- 提高服务端性能的几个socket选项
提高服务端性能的几个socket选项 在之前的一篇文章中,作者在配置了SO_REUSEPORT选项之后,使得应用的性能提高了数十倍.现在介绍socket选项中如下几个可以提升服务端性能的选项: SO_ ...
- 痞子衡嵌入式:Farewell, 我的2020
-- 题图:苏州大学老校门 2020年的最后一天,痞子衡驱车300多公里从苏州赶回了苏北老家(扬州某边陲小镇),连镇铁路虽然新通车了,解决了苏南苏北多年的铁路不直通问题,但奈何痞子衡老家小镇离最近的火 ...
- 单细胞分析实录(4): doublet检测
最近Cell Systems杂志发表了一篇针对现有几种检测单细胞测序doublet的工具的评估文章,系统比较了常见的例如Scrublet.DoubletFinder等工具在检测准确性.计算效率等方面的 ...
- HTML学习案例-仿慕课网网页制作(二)
制作部分:网页footer部分 制作效果: 涉及知识:link部分要复习: dl- definition list dt- definition title dd - definition descr ...