unit PMUnit;
interface
uses
System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants, System.Permissions,
FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs, FMX.Controls.Presentation, FMX.StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
Button3: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
procedure DisplayRationale(Sender: TObject; const APermissions: TClassicStringDynArray; const APostRationaleProc: TProc);
procedure Loacation_PermissionRequestResult(Sender: TObject; const APermissions: TClassicStringDynArray;
const AGrantResults: TClassicPermissionStatusDynArray);
procedure Call_PermissionRequestResult(Sender: TObject; const APermissions: TClassicStringDynArray;
const AGrantResults: TClassicPermissionStatusDynArray);
procedure Camera_PermissionRequestResult(Sender: TObject; const APermissions: TClassicStringDynArray;
const AGrantResults: TClassicPermissionStatusDynArray);
{ Private declarations }
public
{ Public declarations }
FPermissionLoacation, FPermissionCall, FPermissionCamera : string;
end;
var
Form1: TForm1;
implementation
uses
{$IFDEF ANDROID}
Androidapi.JNI.Os,
Androidapi.Helpers,
AndroidApi.Jni.JavaTypes,
FMX.DialogService;
{$ENDIF}
{$R *.fmx}
procedure TForm1.FormCreate(Sender: TObject);
begin
FPermissionLoacation := JStringToString(TJManifest_permission.JavaClass.ACCESS_FINE_LOCATION );
FPermissionCall := JStringToString(TJManifest_permission.JavaClass.CALL_PHONE );
FPermissionCamera := JStringToString(TJManifest_permission.JavaClass.CAMERA );
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
PermissionsService.RequestPermissions([FPermissionLoacation], Loacation_PermissionRequestResult, DisplayRationale);
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
PermissionsService.RequestPermissions([FPermissionCall], Call_PermissionRequestResult, DisplayRationale);
end;
procedure TForm1.Button3Click(Sender: TObject);
begin
PermissionsService.RequestPermissions([FPermissionCamera], Camera_PermissionRequestResult, DisplayRationale);
end;
procedure TForm1.DisplayRationale(Sender: TObject; const APermissions: TClassicStringDynArray; const APostRationaleProc: TProc);
var
I: Integer;
RationaleMsg: string;
begin
for I := 0 to High(APermissions) do
begin
if APermissions[I] = FPermissionLoacation then
RationaleMsg := RationaleMsg + 'The app needs to access the Permission Location' + SLineBreak + SLineBreak
else if APermissions[I] = FPermissionCall then
RationaleMsg := RationaleMsg + 'The app needs to access the Permission Call' + SLineBreak + SLineBreak
else if APermissions[I] = FPermissionCamera then
RationaleMsg := RationaleMsg + 'The app needs to access the Permission Camera';
end;
// Show an explanation to the user *asynchronously* - don't block this thread waiting for the user's response!
// After the user sees the explanation, invoke the post-rationale routine to request the permissions
TDialogService.ShowMessage(RationaleMsg,
procedure(const AResult: TModalResult)
begin
APostRationaleProc;
end)
end;
procedure TForm1.Loacation_PermissionRequestResult(Sender: TObject; const APermissions: TClassicStringDynArray; const AGrantResults: TClassicPermissionStatusDynArray);
begin
// 3 permissions involved: CAMERA, READ_EXTERNAL_STORAGE, WRITE_EXTERNAL_STORAGE
// if (Length(AGrantResults) = 3) and
// (AGrantResults[0] = TPermissionStatus.Granted) and
// (AGrantResults[1] = TPermissionStatus.Granted) and
// (AGrantResults[2] = TPermissionStatus.Granted) then
if ( Length(AGrantResults) = 1) and
(AGrantResults[0] = TPermissionStatus.Granted) then
TDialogService.ShowMessage('Location permissions OK ' )
else
TDialogService.ShowMessage('The required permissions are not granted');
end;
procedure TForm1.Call_PermissionRequestResult(Sender: TObject; const APermissions: TClassicStringDynArray; const AGrantResults: TClassicPermissionStatusDynArray);
begin
if ( Length(AGrantResults) = 1) and
(AGrantResults[0] = TPermissionStatus.Granted) then
TDialogService.ShowMessage('Call permissions OK ' )
else
TDialogService.ShowMessage('The required permissions are not granted');
end;
procedure TForm1.Camera_PermissionRequestResult(Sender: TObject; const APermissions: TClassicStringDynArray; const AGrantResults: TClassicPermissionStatusDynArray);
begin
if ( Length(AGrantResults) = 1) and
(AGrantResults[0] = TPermissionStatus.Granted) then
TDialogService.ShowMessage('Camera permissions OK ' )
else
TDialogService.ShowMessage('The required permissions are not granted');
end;
end.
댓글 없음:
댓글 쓰기