Перейти к содержанию
Fire Monkey от А до Я
  • 0

Разрешение на запись и чтение на Delphi 12.1


Letter

Вопрос

Здравствуйте, на Delphi 12.1 нужно что бы пользователь дал разрешение на запись и чтение файла. Данный код работал без проблем на 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.

 

Ссылка на комментарий

Рекомендуемые сообщения

  • 0

Окно на запрос дать разрешение не открывается, почему?

  PermissionsService.RequestPermissions(
    [
      JStringToString(TJManifest_permission.JavaClass.READ_EXTERNAL_STORAGE),
      JStringToString(TJManifest_permission.JavaClass.WRITE_EXTERNAL_STORAGE)],nil);

 

Ссылка на комментарий
  • 0

Дело не в среде скорее всего, а в версии андроид, вам 

   if TJBuild_VERSION.JavaClass.SDK_INT >= 30  then
      begin
        if TJEnvironment.JavaClass.isExternalStorageManager = false then
        begin

          Intent := TJIntent.Create;
          Intent:=  TJIntent.JavaClass.init(TJSettings.JavaClass.ACTION_MANAGE_APP_ALL_FILES_ACCESS_PERMISSION);
          intent.setData(TJnet_Uri.JavaClass.parse(StringToJString('package:').concat(TAndroidHelper.Context.getPackageName)));
          if intent.resolveActivity(TAndroidHelper.Context.getPackageManager) <> nil then
             TAndroidHelper.Context.startActivity(Intent);

        end;
      end;

   if TJBuild_VERSION.JavaClass.SDK_INT <= 29  then
   begin
       FPermissionReadExternalStorage := JStringToString(TJManifest_permission.JavaClass.READ_EXTERNAL_STORAGE);
       FPermissionWriteExternalStorage := JStringToString(TJManifest_permission.JavaClass.WRITE_EXTERNAL_STORAGE);
       AppPermissions := AppPermissions + [FPermissionReadExternalStorage] +
                                          [FPermissionWriteExternalStorage];
   end;

Изменено пользователем OnePeople
Ссылка на комментарий

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить на вопрос...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...