转载
https://blog.csdn.net/sensor_WU/article/details/125749637
【Delphi】Android 程序权限详细说明
sensor_WU
已于 2022-07-14 07:17:19 修改 739
收藏 1
分类专栏: Delphi 线程 Android 文章标签: Delphi 权限 Android 权限 Android 运行权限 用户确认权限 DelphiAndroid权限
版权
Delphi 线程 同时被 2 个专栏收录
9 篇文章 1 订阅
订阅专栏
Android
11 篇文章 0 订阅
订阅专栏
自从Android 5.1 开始(实际感觉是从 android 8开始的),为了安全有些权限需要动态申请。这些权限还比较多,日后随着Android版本的提升,还有可能添加、变化权限。同时delphi的版本也比较多,不同的版本支持的权限也有些区别,本文就不同Delphi版本和不同android版本相关权限做个自我理解的说明。同时介绍新版本delphi开发Android需要的三种权限处理方法。
一、Delphi 不同版本支持的Android版本情况表:
序号 Delphi 版本 支持Android版本 支持ios版本
1 D11.1(Alexandria) Android 12,11,10,Pie(9.0),Oreo(8.1) ios 15
2 D11 (Alexandria) Android 11
3 D10.4(Sydney) Android 10 ios 14
4 D10.3.3 (Android 64-bit support) Android 10 ios 13
5 D10.3.1 Android 9 ios 12
6 D10.3(RIO)
Android 8.1,8(API Level 26)
New Android Permission Model
ios 12
7 D10.2.3(2018-03-13) Android 8 ios 11.3
8 D10.2.2 Android 8 ios 11
9 D10.2.1 Android 7 ios 10.3
10 D10.2(Tokyo) Android 7 ios 10
11 D10.1(Berlin)
Android 6(API 23)
ios 10
12 D10.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以后,授权模式就区分为以下三种
序号 授权类型
1 Normal Uses Permissions(无需动态确认)
2 Dangerous Uses Permissions(需要动态确认:需要用户程序运行时确认)
3 Signature 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权限。切记:勾选了也需要动态授权。
————————————————
版权声明:本文为CSDN博主「sensor_WU」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/sensor_WU/article/details/125749637