在看这篇文章之前,建议先了解什么是动态申请权限,参见作者《【Delphi】Android 程序权限详细说明》。明白了动态申请权限后,就需要开发动态申请权限程序,为了方便,我们把动态申请权限的程序封装成一个控件,只需要两条语句即可实现动态申请权限。

一、需要动态申请的权限(dangerous)列表:官方文档
| 序号 | 权限 | 说明 | API |
| 1 | ACCESS_COARSE_LOCATION | 应用程序访问大致位置 | 1 |
| 2 | ACCESS_FINE_LOCATION | 应用程序访问精确位置 | 1 |
| 3 | ACCESS_BACKGROUND_LOCATION(*) | 允许程序后台获取位置信息,如果要这个权限,必须首先请求好ACCESS_COARSE_LOCATION或者ACCESS_FINE_LOCATION权限 | 29 |
| 4 | ACCESS_MEDIA_LOCATION | 允许应用从媒体收藏中读取未知信息 | 29 |
| 5 | ACCESS_MOCK_LOCATION(obsolete) | 似乎是关于GPS位置信息的权限,当前官方文档已经查询不到,弃用 | |
| 6 | ACTIVITY_RECOGNITION | 获取设备中的健身运动信息 | 29 |
| 7 | ADD_VOICEMAIL | Allows an application to add voicemails into the system | 14 |
| 8 | ANSWER_PHONE_CALLS | 接听或挂断电话、监听通话状态 | 26 |
| 9 | AUTHENTICATE_ACCOUNTS(obsolete) | 目前官方已弃用 | |
| 10 | BODY_SENSORS | 获取您的生命体征相关数据 | 20 |
| 11 | BODY_SENSORS_BACKGROUND | 后台获取您的生命体征相关数据 | 33 |
| 12 | CALL_PHONE | 直接拨打电话 | 1 |
| 13 | CAMERA | 拍摄照片和录制视频 | 1 |
| 14 | CONYINUE_A_CALL_STARTED_IN_ANOTHER_APP | 目前官方已弃用 | |
| 15 | GET_ACCOUNTS | 获取手机账户 | 1 |
| 16 | MANAGE_ACCOUNTS(obsolete) | 目前官方已弃用 | |
| 17 | PROCESS_OUTGOING_CALLS | 目前用法从API29开始有改变:接听或挂断电话、监听通话状态 | 1、29 |
| 18 | READ_CALENDAR | 读取日历中的日程信息 | 1 |
| 19 | READ_CALL_LOG | 读取通话记录 | 16 |
| 20 | READ_CONTACTS | 读取联系人信息 | 1 |
| 21 | READ_EXTERNAL_STORAGE | 读取设备上的照片及文件 | 16 |
| 22 | READ_HISTORY_BOOKMARKS(obsolete) | 目前官方已弃用 | |
| 23 | READ_PHONE_NUMBERS | 获取当前手机号码 | 26 |
| 24 | READ_PHONE_STATE | 获取手机状态,比如当前可否拨打电话 | 1 |
| 25 | READ_SMS | 读取短信权限 | 1 |
| 26 | RECEIVE_MMS | 允许程序接收MMS消息 | 1 |
| 27 | RECEIVE_SMS | 允许程序接收短信 | 1 |
| 28 | RECEIVE_WAP_PUSH | 允许程序接收WAP推送消息 | 1 |
| 29 | RECORD_AUDIO | 进行通话录音或者本地录音 | 1 |
| 30 | SEND_SMS | 发送短信权限 | 1 |
| 31 | USE_SIP | 使用SIP视频服务 | 9 |
| 32 | WRITE_CALENDAR | 读写入日历中日程信息 | 1 |
| 33 | WRITE_CALL_LOG | 修改通话记录 | 16 |
| 34 | WRITE_CONTACTS | 修改联系人信息 | 1 |
| 35 | WRITE_EXTERNAL_STORAGE | 读写设备上的照片及文件 | 4 |
二、控件使用限制:
控件只能支持Delphi 10.3及以上版本,因为10.3以下版本Delphi不支持动态申请权限。如果你使用的是10.3及以上版本,请下载本控件安装使用。另外如果要开发android 8 及以上的APP,建议至少升级到Delphi的10.3版本。
三、控件介绍
1. 控件属性:
| 序号 | 属性 | 说明 |
| 1 | Permissions | 是一个包含所有dangerous权限的枚举列表 TPermission = ( ... ) 需要什么权限就选择什么权限。 |
| 2 | OnApplyResult | 这是一个事件,申请完权限后系统批复结果通知回调事件。 procedure(const Sender : TObject; GrantedResult : Boolean; NoGranteds : TArray<string>) 权限获得成功:GrantedResult = True,NoGranteds 无意义 权限获得失败:GrantedResult = False,NoGranteds 表示失败的权限名称字符串列表 |
2. 控件方法:
| 序号 | 方法 | 说明 |
| 1 | Apply | 申请权限,设置需要的权限属性Permissions值之后,就可以通过这个方法申请权限 |
| 2 | IsPermissionGranted | 判断程序当前是否已经获得某个权限。 function IsPermissionGranted(APermission : string): Boolean; APermission 表示权限名称。 如果权限存在,结果为True,否则为False |
3. 使用方法及源文件下载,请移步Gitee。
var
Android_Permission : TAndroid_Permission;
try
Android_Permission := TAndroid_Permission.Create(nil);
Android_Permission.Permissions := Android_Permission.Permissions + [CAMERA];
//....
Android_Permission.Apply;
finally
Android_Permission.Free;
end;

1239

被折叠的 条评论
为什么被折叠?



