做学校后台网站用什么浏览器,wordpress域名替换,找网站做网站做网站,机关网站建设考核测评总结DELPHI安卓动态权限申请安卓8.0以前的版本#xff0c;只需要给静态权限就可以了#xff0c;但安卓8.0及以后的版本#xff0c;还需要运行期用代码动态申请权限。下面以《蓝牙权限》为例#xff0c;其他权限类似。Delphi 10.3 社区版#xff0c;提供的 Sample 里面有一个例…DELPHI安卓动态权限申请安卓8.0以前的版本只需要给静态权限就可以了但安卓8.0及以后的版本还需要运行期用代码动态申请权限。下面以《蓝牙权限》为例其他权限类似。Delphi 10.3 社区版提供的 Sample 里面有一个例子程序在C:UsersPublicDocumentsEmbarcaderoStudio20.0SamplesObject PascalMulti-Device SamplesDevice Sensors and ServicesBluetoothBLEScanner这个例子程序提供了打开 BLE 的时候的动态权限验证的例子代码。首先在 IDE 的 Project - Options 菜单弹出来的窗口里面找到左边树结构的 Application -- Uses Permissions 项目则右边会出来一堆权限让你打勾。这里要勾选上 Bluetooth 和 Bluetooth admin 两项。老的安卓版本勾选这两项就可以了。新的安卓版本还需要运行期用代码动态申请权限。代码里面首先要实现一个函数procedure RequestPermissionsResult(Sender: TObject; const APermissions: TArray; const AGrantResults: TArray);这个函数是一个动态申请权限的结果的回调函数。在启动 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; const APostRationaleProc: TProc);beginTDialogService.ShowMessage(We need to be given permission to discover BLE devices,procedure(const AResult: TModalResult)beginAPostRationaleProc;end)end;在 RequestPermissionsResult 这个函数里面判断是否通过权限如果通过才去调用蓝牙的方法。procedure TForm6.RequestPermissionsResult(Sender: TObject; const APermissions: TArray; const AGrantResults: TArray);begin// 1 permissions involved: ACCESS_COARSE_LOCATIONif (Length(AGrantResults) 1) and (AGrantResults[0] TPermissionStatus.Granted) thenStartBLEDiscoveryelseTDialogService.ShowMessage(Cannot start BLE scan as the permission has not been granted);end;