В 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
В Delphi 12.1 PermissionsService.RequestPermissions() работает неправильно, предоставляя разрешения на чтение/запись фай ⇐ Android
Форум для тех, кто программирует под Android
1727275533
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.
Подробнее здесь: [url]https://stackoverflow.com/questions/79022029/in-delphi-12-1-permissionsservice-requestpermissions-not-working-correctly-to[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия