問題
Delphi 10.4 的安卓權(quán)限申請代碼,在 Delphi 11 下面編譯無法通過。
原因
原因是里面有幾個變量類型的定義有所不同。
procedure TDmBLE.RequestPermissionsResult(Sender: TObject; const APermissions: TArray<string>; const AGrantResults: TArray<TPermissionStatus>);
上述代碼是 Delphi 10.4 的,里面有兩個類型需要更改:
1.?TArray<string> 更改為:TClassicStringDynArray;
2.?TArray<TPermissionStatus> 更改為:TClassicPermissionStatusDynArray;
procedure DisplayRationale(Sender: TObject; const APermissions: TArray<string>; const APostRationaleProc: TProc);
同樣,上面這個函數(shù)里面的?TArray<string> 更改為:TClassicStringDynArray;
適用于 Delphi 11 的安卓權(quán)限動態(tài)申請的完整代碼
我把代碼封裝到一個單獨的 DataModule 里面了。這樣方便在不同的項目里重復使用。文章來源:http://www.zghlxwxcb.cn/news/detail-829192.html
unit UDmPermissions;
// 安卓的權(quán)限申請代碼 Delphi 11
interface
uses
System.SysUtils, System.Types, System.Classes, System.Permissions, FMX.DialogService, System.UITypes;
type
TDmPermissions = 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;
var
DmPermissions: 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)
begin
APostRationaleProc;
end)
end;
procedure TDmPermissions.DoGotPermissions;
begin
if Assigned(FGotPermission) then FGotPermission(Self);
end;
procedure TDmPermissions.RequestPermissionsResult(Sender: TObject;
const APermissions: TClassicStringDynArray;
const AGrantResults: TClassicPermissionStatusDynArray);
begin
if (Length(AGrantResults) = 1) and (AGrantResults[0] = TPermissionStatus.Granted) then
Self.DoGotPermissions
else
TDialogService.ShowMessage('Cannot start BLE scan as the permission has not been granted');
end;
end.
又及:
上述代碼中,DoGotPermissions 方法,用于調(diào)用這個模塊的地方,當用戶在申請權(quán)限的界面上通過了權(quán)限申請后,要執(zhí)行的代碼,通過這個事件方法調(diào)用。文章來源地址http://www.zghlxwxcb.cn/news/detail-829192.html
到了這里,關(guān)于Delphi v11 安卓權(quán)限申請的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!