【Delphi】Android 程序权限详细说明

自从Android 5.1 开始(实际感觉是从 android 8开始的),为了安全有些权限需要动态申请。这些权限还比较多,日后随着Android版本的提升,还有可能添加、变化权限。同时delphi的版本也比较多,不同的版本支持的权限也有些区别,本文就不同Delphi版本和不同android版本相关权限做个自我理解的说明。同时介绍新版本delphi开发Android需要的三种权限处理方法。

一、Delphi 不同版本支持的Android版本情况表:

序号Delphi 版本支持Android版本支持ios版本
1D11.1(AlexandriaAndroid 12,11,10,Pie(9.0),Oreo(8.1)ios 15
2D11 (AlexandriaAndroid 11
3D10.4(SydneyAndroid 10ios 14
4D10.3.3 (Android 64-bit support)Android 10ios 13
5D10.3.1Android 9ios 12
6D10.3(RIO

 Android 8.1,8(API Level 26)

New Android Permission Model

ios 12
7D10.2.3(2018-03-13)Android 8ios 11.3
8D10.2.2Android 8ios 11
9D10.2.1Android 7ios 10.3
10D10.2(TokyoAndroid 7ios 10
11D10.1(Berlin

Android 6(API 23)

ios 10
12D10.0(Seattle

Android 5.0, 5.1 (API Level 21, 22)

Android 4.4(API Level 19) 
Android 4.1.x, 4.2.x, 4.3.x(API Levels 16, 17, 18)

Android 4.0.3 and 4.0.4(API Level 15)

ios 9
13

二、从 D10.3 开始支持新的 Android 授权模式(New Android Permission Model

在10.3以前,Android的授权模式就是一种,在编译的时候就确定好了,无需用户在程序运行时动态授权。从10.3以后,授权模式就区分为以下三种

序号授权类型
1Normal Uses Permissions(无需动态确认
2Dangerous Uses Permissions(需要动态确认:需要用户程序运行时确认)
3Signature Uses Permissions(无需动态确认

无需动态确认的权限(install权限),只需要在 Project > Options > Application > Uses Permissions 菜单中勾选对应的权限即可完成授权。

需要动态确认的权限(runtime权限),除了上一步勾选之外,还需要在程序运行的时候提示用户确认,这一步需要通过程序来完成。如果这两步有一步没有成功,则无法获取到对应的权限。

上图是 10.1 的授权截图。只要开发时在配置中授权即可。

这张图为 11.1 的授权截图。需要在程序运行时,让用户授权确认。 

三、Permisssion 权限级别说明

级别解释
normal    normal级别是默认值。低风险的权限采用此级别。在app安装的时候,系统自动赋予此app请求的所有normal权限,而不会征求用户的同意(但是,在安装app之前,用户总是有权选择检查这些权限)。
dangerous    较高风险的权限,此级别的权限意味着,请求权限的app将要访问用户的隐私数据或者控制设备,这可能给用户带来负面影响。
因为dangerous权限会引入潜在的风险,所以系统不会自动赋予此类权限给app。例如,在安装app的时候,会将dangerous权限展示给用户,并请求用户确认。
signature只有请求权限的app与声明权限的app的签名是一样的时候,系统才会赋予signature权限。
如果签名一致,系统会自动赋予权限,而不会通知用户或者征求用户的同意。

 关于install权限和runtime权限:

install权限(无需动态):安装时权限,是指在安装app的时候,赋予app的权限。normal和signature级别的权限都是安装时权限。不会给用户提示界面,系统自动决定权限的赋予或拒绝。

runtime权限(需要动态):运行时权限,是指在app运行过程中,赋予app的权限。这个过程中,会显示明显的权限授予界面,让用户决定是否授予权限。如果app的targetSdkVersion是22(Lollipop MR1  5.1)及以下,dangerous权限是安装时权限,否则dangerous权限是运行时权限

总结:

1. 如果你使用Delphi10.3以下版本,就无需考虑动态授权(runtime权限);

2. 如果使用Delphi10.3及以上版本,就需要支持动态授权(runtime权限),这样程序才能正确获取到对应的权限;

3. 如果需要动态授权,除了需要在程序配置页面进行勾选外,还需要程序专门提示用户授权确认,否则程序无法得到授权,对应的功能将不起任何作用,也不会有任何提示,这种情况下你将会是一头雾水重点 重点 重点) 程序该如何实现呢?参见下一篇《【Delphi】开发Android程序动态申请权限控件》

补充说明:

按照Delphi官方的说法,一些基本的权限(不区分install或者runtime)在创建Delphi工程的时候已经默认勾选了,这些权限包括:

Access coarse location
Access fine location
Call phone
Camera
Internet
Read calendar
Read external storage
Read phone state
Write calendar
Write external storage
但在实际测试中发现,高版本的并没有勾选Read calendar和Write calendar权限。切记:勾选了也需要动态授权

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

海纳老吴

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值