DELPHI安卓动态权限申请

安卓8.0以前的版本,只需要给静态权限就可以了,但安卓8.0及以后的版本,还需要运行期用代码动态申请权限。

下面以《蓝牙权限》为例,其他权限类似。

Delphi 10.3 社区版,提供的 Sample 里面有一个例子程序在:
C:\Users\Public\Documents\Embarcadero\Studio\20.0\Samples\Object Pascal\Multi-Device Samples\Device Sensors and Services\Bluetooth\BLEScanner
这个例子程序提供了打开 BLE 的时候的动态权限验证的例子代码。
首先,在 IDE 的 Project - Options 菜单弹出来的窗口里面,找到左边树结构的: Application -- Uses Permissions 项目,则右边会出来一堆权限让你打勾。这里要勾选上 Bluetooth 和 Bluetooth admin 两项。
老的安卓版本,勾选这两项就可以了。
新的安卓版本,还需要运行期用代码动态申请权限。
代码里面:
首先要实现一个函数:
procedure RequestPermissionsResult(Sender: TObject; const APermissions: TArray<string>; const AGrantResults: TArray<TPermissionStatus>);
这个函数是一个动态申请权限的结果的回调函数。
在启动 BLE 的时候,通过以下代码申请权限:
PermissionsService.RequestPermissions([FLocationPermission], RequestPermissionsResult, DisplayRationale);
上述的代码的 PermissionsService 是声明在 System.Permissions 里面的。
上述代码里面的 RequestPermissionsResult 就是前面的那个回调函数。它在这里被调用,而且还被填入参数。
上述代码里面的 FLocationPermission: string; 它来自:
procedure TForm6.FormCreate(Sender: TObject);
begin
{$IFDEF ANDROID} 
FLocationPermission := JStringToString(TJManifest_permission.JavaClass.ACCESS_COARSE_LOCATION);
{$ENDIF}
end;
上述代码里面用到的 JStringToString 要 Uses Androidapi.Helpers;
 
上述代码中还有一个 DisplayRationale 也是一个函数:
procedure TForm6.DisplayRationale(Sender: TObject; const APermissions: TArray<string>; const APostRationaleProc: TProc);
begin 
TDialogService.ShowMessage('We need to be given permission to discover BLE devices',   
procedure(const AResult: TModalResult)   
begin     
APostRationaleProc;   
end)
end;
 
在 RequestPermissionsResult 这个函数里面,判断是否通过权限,如果通过,才去调用蓝牙的方法。
procedure TForm6.RequestPermissionsResult(Sender: TObject; const APermissions: TArray<string>; const AGrantResults: TArray<TPermissionStatus>);
begin 
// 1 permissions involved: ACCESS_COARSE_LOCATION 
if (Length(AGrantResults) = 1) and (AGrantResults[0] = TPermissionStatus.Granted) then   
StartBLEDiscovery 
else   
TDialogService.ShowMessage('Cannot start BLE scan as the permission has not been granted');
end;

DELPHI安卓动态权限申请的更多相关文章

  1. DELPHI安卓定位权限申请

    DELPHI安卓定位权限申请 安卓8及以后版本的权限分为静态和动态申请2部分,而之前的安卓版本只需要静态申请权限. 1)静态申请定位权限: 2)动态申请定位权限: uses System.Permis ...

  2. Android6.0动态权限申请

    goggle在Android6.0要求部分权限需要动态申请,直接下载AndroidManifest.xml中无效 6.0权限的基本知识,以下是需要单独申请的权限,共分为9组, 每组只要有一个权限申请成 ...

  3. Android6.0动态权限申请步骤以及需要注意的一些坑

    因为工作需要,简单研究了一下Android6.0权限申请,在Google提供的sample的基础上,写了一个简单的demo.算是自己的笔记吧,可能会比较混乱,主要是方便以后查看.后期有别的问题,随时更 ...

  4. 【Unity游戏开发】Android6.0以上的动态权限申请问题

    一.引子 最近公司的游戏在做安全性测试,期间也暴露出了不少安全上的问题.虽然我们今天要说的权限申请和安全性相关不大,但是也会影响到游戏的使用体验等,所以本篇博客中马三就想和大家谈谈Android6.0 ...

  5. Android 6.0动态权限申请

    转载(Android 6.0 动态权限申请简单简洁优雅的处理方式): https://blog.csdn.net/lin_dianwei/article/details/79025324

  6. Android 6.0 动态权限申请注意事项

    版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/uana_777/article/details/54136255 Part One 权限区分 And ...

  7. Android 6.0 动态权限申请

    1. 概述 Android 6.0 (API 23) 之前应用的权限在安装时全部授予,运行时应用不再需要询问用户.在 Android 6.0 或更高版本对权限进行了分类,对某些涉及到用户隐私的权限可在 ...

  8. Android动态权限申请

    Android系统中,目前Dangerous级别的权限都需要动态申请.步骤如下: 1.AndroidManfiest.xml中申明需要的动态权限 <?xml version="1.0& ...

  9. Android 6.0动态权限申请教程

    转载请标明出处: http://www.cnblogs.com/why168888/p/6580396.html 本文出自:[Edwin博客园] PermissionManage 介绍 如果设备运行的 ...

随机推荐

  1. phpstorm+xdebug+mvc

    前一段时间自己琢磨出来,今天又给忘了,还去t00ls发帖.... 写到这里备忘 拿这个yxcms举例子 版本: yxcms1.2.1 源码:http://pan.baidu.com/s/1pJM1CP ...

  2. laravel 的安装与配置

    1.工作环境 php 7.0+ .MySQL5.1+ 这里可以用开发环境包一键安装: 自己用的是wamp(windows)http://www.wampserver.com/en/ linux系统和m ...

  3. wince如何扫描条码并且在浏览器上查询数据

    这个挺简单的,winform也适用 public override void OnGetBarcode(string scanStr) { try { Process.Start("iesa ...

  4. dubbo线程池作用于接口而不是方法

    记一次线上dubbo服务超时和线程池满问题排查 可能调用的接口没问题,但是该服务中的其他接口占用完了线程池,导致调用超时被拒绝处理.

  5. 09 Windows编程——键盘消息

    焦点窗口:接收到这个键盘事件的窗口称为有输入焦点的窗口.具有输入焦点的窗口要么是活动窗口,要么是活动窗口的子孙窗口. 活动窗口:活动窗口通常是很好鉴别的.它总是最上层的窗口——也就是说,它的父窗口句柄 ...

  6. linux 终端命令学习

    Linux 的版本不同,其终端下命令也有所差异的. cal -y / -d  /-m  查看日历的 free  -m /df -m 查剩余空间的 passwd  -l / -u  用户名 -锁定,解锁 ...

  7. 什么是 java 序列化?(未完成)什么情况下需要序列化?(未完成)

    什么是 java 序列化?(未完成)什么情况下需要序列化?(未完成)

  8. HDU 6735 结论网络流 机器人不重叠路径

    我们可以得到一个结论:没有两个机器人走过的路会重叠 所以题目就转变为了能不能让机器人的路径不重叠且每个机器人能到达终点 直接一个点朝他四连通方向的四个点连容量为1的边即可 #include<bi ...

  9. 将自己写的组件封装成类似element-ui一样的库,可以cdn引入

    在写好自己的组件之后 第一步 修改目录结构 在根目录下创建package文件夹,用于存放你要封装的组件 第二部 在webpack配置中加入 pages与publicpath同级 pages: { in ...

  10. 【JUC系列第三篇】-CAS算法详解

    作者 : 毕来生 微信: 878799579 1.CAS是什么? CAS是英文单词(Compare-And-Swap)的缩写,中文意思是:比较并替换.CAS需要有3个操作数:内存地址V,旧的预期值A, ...