优化企业网站标题,珠海高端网站开发,在线培训方案设计,wordpress置顶不重复问题
Delphi 10.4 的安卓权限申请代码#xff0c;在 Delphi 11 下面编译无法通过。
原因
原因是里面有几个变量类型的定义有所不同。
procedure TDmBLE.RequestPermissionsResult(Sender: TObject; const APermissions: TArraystring; const AGrantResults: TAr…问题
Delphi 10.4 的安卓权限申请代码在 Delphi 11 下面编译无法通过。
原因
原因是里面有几个变量类型的定义有所不同。
procedure TDmBLE.RequestPermissionsResult(Sender: TObject; const APermissions: TArraystring; const AGrantResults: TArrayTPermissionStatus);
上述代码是 Delphi 10.4 的里面有两个类型需要更改
1. TArraystring 更改为TClassicStringDynArray
2. TArrayTPermissionStatus 更改为TClassicPermissionStatusDynArray
procedure DisplayRationale(Sender: TObject; const APermissions: TArraystring; const APostRationaleProc: TProc);
同样上面这个函数里面的 TArraystring 更改为TClassicStringDynArray
适用于 Delphi 11 的安卓权限动态申请的完整代码
我把代码封装到一个单独的 DataModule 里面了。这样方便在不同的项目里重复使用。
unit UDmPermissions;
// 安卓的权限申请代码 Delphi 11
interfaceusesSystem.SysUtils, System.Types, System.Classes, System.Permissions, FMX.DialogService, System.UITypes;typeTDmPermissions class(TDataModule)private{ Private declarations }FGotPermission: TNotifyEvent;procedure RequestPermissionsResult(Sender: TObject; const APermissions: TClassicStringDynArray; const AGrantResults: TClassicPermissionStatusDynArray);procedure DisplayRationale(Sender: TObject; const APermissions: TClassicStringDynArray; const APostRationaleProc: TProc);procedure DoGotPermissions;public{ Public declarations }property OnGotPermissions: TNotifyEvent read FGotPermission write FGotPermission;end;varDmPermissions: TDmPermissions;implementation{%CLASSGROUP FMX.Controls.TControl}{$R *.dfm}{ TDmPermissions }procedure TDmPermissions.DisplayRationale(Sender: TObject;const APermissions: TClassicStringDynArray; const APostRationaleProc: TProc);
begin//Rationale: 理由TDialogService.ShowMessage(We need to be given permission to discover BLE devices,procedure(const AResult: TModalResult)beginAPostRationaleProc;end)
end;procedure TDmPermissions.DoGotPermissions;
beginif Assigned(FGotPermission) then FGotPermission(Self);
end;procedure TDmPermissions.RequestPermissionsResult(Sender: TObject;const APermissions: TClassicStringDynArray;const AGrantResults: TClassicPermissionStatusDynArray);
beginif (Length(AGrantResults) 1) and (AGrantResults[0] TPermissionStatus.Granted) thenSelf.DoGotPermissionselseTDialogService.ShowMessage(Cannot start BLE scan as the permission has not been granted);
end;end.
又及
上述代码中DoGotPermissions 方法用于调用这个模块的地方当用户在申请权限的界面上通过了权限申请后要执行的代码通过这个事件方法调用。