Delphi / Firemonkey Как вызвать Settings.System.canWrite (context) (Android) - PullRequest
0 голосов
/ 14 марта 2020

Я использую Delphi 10.3 Community Edition и хочу использовать WRITE_SETTINGS в моем приложении для установки яркости. Мне удалось заставить его реализовать эту процедуру для вызова диалогового окна настроек:

</p> <pre><code>procedure RequestWriteSettings; var Intent: JIntent; begin Intent := TJIntent.JavaClass.init(TJSettings.JavaClass.ACTION_MANAGE_WRITE_SETTINGS); TAndroidHelper.Activity.startActivity(Intent); end;

Я могу вызвать эту процедуру в моем приложении, диалоговое окно появляется, и я могу установить необходимые разрешения. Но я не хочу вызывать эту процедуру постоянно, потому что это не удобно для пользователя. Мне нужно проверить, установлено ли уже разрешение WRITE_SETTINGS, но я не знаю, как реализовать это в Delphi / Firemonkey.

Что я могу найти, так это то, что нужно вызвать «Settings.System.canWrite (context) ", но я могу найти только образцы для java. Называть такие java процедуры в Delphi не так просто. Я искал уже несколько недель и пробовал "все по своему усмотрению", но все еще безуспешно.

Может кто-нибудь предоставить строку кода, как эта процедура должна вызываться в Delphi?

Большое спасибо заранее! MPage

Ответы [ 2 ]

0 голосов
/ 15 марта 2020

Тем временем я нашел решение для себя, но я думаю, что Дейв лучше. ; -)

Вот что я нашел методом "проб и ошибок":

function HasWriteSettings: Boolean; begin // Call canWrite to check for permission WRITE_SETTINGS Result := TJSettings_System.JavaClass.canWrite(TAndroidHelper.Context.getApplicationContext);</p> <pre><code>end;

0 голосов
/ 14 марта 2020

Пример кода для проверки WRITE_SETTINGS:

uses
  Androidapi.JNI.GraphicsContentViewText, Androidapi.JNI.Provider, Androidapi.JNI.Net, Androidapi.Helpers;

procedure TForm1.RequestWriteSettingsButtonClick(Sender: TObject);
begin
  if not TJSettings_System.JavaClass.canWrite(TAndroidHelper.Context) then
    StartWritePermissionsActivity
  else
    ShowMessage('System says app can write settings');
end;

procedure TForm1.StartWritePermissionsActivity;
var
  LIntent: JIntent;
begin
  LIntent := TJIntent.JavaClass.init(TJSettings.JavaClass.ACTION_MANAGE_WRITE_SETTINGS);
  LIntent.setData(TJnet_Uri.JavaClass.parse(StringToJString('package:').concat(TAndroidHelper.Context.getPackageName)));
  TAndroidHelper.Context.startActivity(LIntent);
end;
...