再说安卓的动态权限申请

本博客之前有两篇文章提到安卓的动态权限申请。各位观众读了以后,可能还是蒙的,因为那两篇文章没写清楚。所以这里再写一篇。

开发环境:Delphi 10.3 社区版。

安卓系统下,APP 需要申请权限的地方有两处。

1. 原来就有的,Delphi IDE 的菜单:Project / Options / Application / User Permissions 里面,右边窗口,找到你要的功能的权限,打勾。这个是以前的安卓版本需要的。比如,你要控制摄像头,或者,你要对手机的蓝牙进行操作。

2. 运行期用代码动态申请。这个是新版的安卓需要的。

因此,现在开发 APP,你必须同时做上述两件事。

以下讲如何写代码在运行期动态申请。

其实就一句话:PermissionsService.RequestPermissions(三个参数);

你的 APP 调用这句话来申请权限,就OK了。上述函数是 Delphi 提供的权限框架,必须 Use System.Permissions 才能调用。

上述函数有三个参数:

procedure TPermissionsService.RequestPermissions(const APermissions: TArray<string>;
  const AOnRequestPermissionsResult: TRequestPermissionsResultProc; AOnDisplayRationale: TDisplayRationaleProc);

上面函数中的三个参数分别是:

1. 你需要的权限的字符串数组。你需要三个权限,就填入三个字符串;你需要几个权限,就填入几个字符串。

2. 获得的用户允许的权限的结果的回调函数。你可以实现这个函数,在调用 RequestPermissions 方法时把函数名放在这里;也可以直接在这里放 nil ;

3. 你需要权限的请求文字的方法。你可以实现这个方法,在这个方法中显示一些你要显示给用户的文字。也可以直接在这里填入 nil 而无需去实现这个方法。

重点来了:权限字符串是如何来的?

这里给一个例子,其它权限字符串都一样。

FReadStoragePermission := JStringToString(TJManifest_permission.JavaClass.READ_EXTERNAL_STORAGE);

FReadStoragePermission 就是一个权限字符串。它对应的是一个具体的权限,这里是读存储器的权限。APP 只能访问 APP 自己的文件夹,其它的文件夹 APP 是没有权限访问的,比如共享给所有程序的 Download 文件夹。如果要访问,就需要申请这个权限。TJManifest_permission.JavaClass 是声明在 Androidapi.JNI.Os 里面的,所以要先 uses 它。然后它有很多的 property,其中一个是 READ_EXTERNAL_STORAGE。其它权限的 property 也在这里找。

根据上述方法,可以获得多个不同权限的字符串。在调用 RequestPermissions 时作为参数填进去。

JStringToString 方法在 Androidapi.Helpers 里面,因此要 uses Androidapi.Helpers 才行。

那两个作为参数的方法,如果要实现,可以参考 Delphi 的例子代码,或者看俺的前一篇关于权限的博客文章。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值