再说安卓的动态权限申请

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

开发环境: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;
  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 的例子代码,或者看俺的前一篇关于权限的博客文章。

你可能感兴趣的:(Delphi,FireMonkey,安卓)