В Delphi 12.1 PermissionsService.RequestPermissions() работает неправильно, предоставляя разрешения на чтение/запись файAndroid

Форум для тех, кто программирует под Android
Ответить
Anonymous
 В Delphi 12.1 PermissionsService.RequestPermissions() работает неправильно, предоставляя разрешения на чтение/запись фай

Сообщение Anonymous »

В Android пользователю необходимо предоставить разрешение на запись и чтение файла. Этот код без проблем работал в Delphi 10.4. А вот в Delphi 12.1 при открытии приложения не появляется окно дать разрешение, а сразу переходит к процедуре PermissionRequestResult и при проверке соответственно, так как разрешение не дано, выводит окно "Необходимые разрешения имеют не получен".
Можете ли вы сказать мне, что не так с кодом?
unit Unit1;

interface

uses
System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants,
FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs,System.Permissions,
Androidapi.Jni.Os,Fmx.DialogService,
Androidapi.Helpers;

type
TForm1 = class(TForm)
procedure FormCreate(Sender: TObject);
procedure PermissionRequestResult(Sender: TObject;const APermissions: TClassicStringDynArray;const AGrantResults: TClassicPermissionStatusDynArray);
procedure ExplainReason(Sender: TObject; const APermissions: TClassicStringDynArray; const APostRationaleProc: TProc);
procedure FormShow(Sender: TObject);
private
{ Private declarations }
FPermissionWrite: string;
FPermissionRead: string;
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.fmx}

procedure TForm1.ExplainReason(Sender: TObject;
const APermissions: TClassicStringDynArray; const APostRationaleProc: TProc);
begin
TDialogService.ShowMessage('Приложению нужен доступ к карте памяти для таких то целей',
procedure(const AResult: TModalResult)
begin
APostRationaleProc;
end)
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
FPermissionWrite := JStringToString(TJManifest_permission.JavaClass.WRITE_EXTERNAL_STORAGE);
FPermissionRead := JStringToString(TJManifest_permission.JavaClass.READ_EXTERNAL_STORAGE);
end;

procedure TForm1.FormShow(Sender: TObject);
begin
PermissionsService.RequestPermissions([FPermissionWrite, FPermissionRead], PermissionRequestResult, ExplainReason);
end;

procedure TForm1.PermissionRequestResult(Sender: TObject;
const APermissions: TClassicStringDynArray;
const AGrantResults: TClassicPermissionStatusDynArray);
begin
if (Length(AGrantResults) = 2) and (AGrantResults[0] = TPermissionStatus.Granted) and (AGrantResults[1] = TPermissionStatus.Granted) then
begin
TDialogService.ShowMessage('Разрешения получены');
end
else begin
TDialogService.ShowMessage('Требуемые разрешения не получены');
end;
end;

end.


Подробнее здесь: https://stackoverflow.com/questions/790 ... rrectly-to
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Android»