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 ...
随机推荐
- matplotlib的学习9-bar柱状图
import matplotlib.pyplot as plt import numpy as np ''' 向上向下分别生成12个数据,X为 0 到 11 的整数 ,Y是相应的均匀分布的随机数据. ...
- 关于_tostring[php]的另类利用
收获 反序列化tostring的考点不一定要考察调用一个Class,也可以使用echo来进行考察 tostring()方法:在直接输出对象引用的时候,就不会产生错误,而是自动调用了__tostring ...
- angular8 在componet里面跳转新的地址页面
this.router.navigate(['/teacher/course/detail/' + id]);
- 这可能是目前最轻量级、最支持MVVM、可定制性最高的开源Chart控件!
由于项目中经常用到Series Chart,而目前市面又实在找不到既支持MVVM,又轻量级的开源Chart控件,于是干脆就花了两周时间随手写了一个.昨天感觉还比较满意,就发布到了Github上:htt ...
- MGRE实验--内网为OSPF
实验要求: R2为ISP,只能配置IP地址 R1.R3.R4之间构建MGRE环境,仅R1IP地址固定 内网使用OSPF获取路由,全网可达 拓扑: 1.配置IP地址 2.配置缺省 3.配置MGRE环境 ...
- 1.自定义view入门
1.继承自view 系统提供的view 如 TextView .ImageView 都是继承自view的: 2.自定义一个TextView 通过自定义一个TextView 来熟悉继承自view 的自定 ...
- 蚂蚁开源的 SOFABoot,和 Spring Boot 有啥关系?
一.SOFABoot 是什么鬼? 说到 SOFABoot,不得不先说下 SOFARPC 框架,SOFARPC 也是大名远扬,最早起源于阿里淘宝 HSF 框架,现在是蚂蚁金服开源的一款高性能.高可扩展性 ...
- cmd运行乱码或显示编码GBK的不可映射字符解决方法
出现这样的错误,一般是因为代码中含有中文字符,注释中的中文字符也算.由于使用cmd运行java程序的时候,系统默认的编码格式是gbk.而包含中文字符的代码一般是Unicode格式,所以直接运行含有中文 ...
- Java网络编程:QQ邮件发送客户端程序设计
目录 一.目标介绍 1.认识SMTP(邮件传输协议) 2.POP3(邮件接收协议) 二.基于Base64编码邮箱及授权码 1.开通QQ邮箱SMTP/POP3服务 2.Java编写BASE64编码程序 ...
- eclipse在线安装svn插件subclipse
eclipse在线安装svn插件subclipse 1 Help > Eclipse Marketplace,打开Eclipse Marketplace 2 切换到Search,输入subcli ...