Delphi / Firemonkey如何调用Settings.System.canWrite(context)(Android)

问题描述 投票:0回答:1

我正在使用Delphi 10.3 Community Edition,并希望在我的应用程序中使用WRITE_SETTINGS来设置亮度。我可以设法实现此过程以调用设置对话框:

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的示例。在Delphi中调用这类Java例程并不是那么容易。我已经搜索了几个星期,并尝试了“依靠我自己的东西”,但仍然没有成功。

有人可以提供代码行如何在Delphi中调用此例程吗?

非常感谢!MPage

android delphi firemonkey android-permissions
1个回答
0
投票

用于检查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;

0
投票

同时,我为自己找到了解决方案,但是我认为Dave更好。 ;-)

这就是我通过“尝试和错误”方法发现的内容:

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

end;

© www.soinside.com 2019 - 2024. All rights reserved.