Delphi/Firemonkey 如何调用 Settings.System.canWrite(上下文) (Android)

Delphi/Firemonkey How to call Settings.System.canWrite(context) (Android)

我正在使用 Delphi 10.3 社区版,并希望在我的应用程序中使用 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 例程并不容易。我已经搜索了几个星期并尝试了 "things on my own",但仍然没有成功。

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

非常感谢! MPage

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

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

这就是我用 "trial and error" 方法发现的:

函数 HasWriteSettings:布尔值; 开始 // 调用 canWrite 检查权限 WRITE_SETTINGS 结果 := TJSettings_System.JavaClass.canWrite(TAndroidHelper.Context.getApplicationContext);</p> <pre><code>end;