没有Oustement Permissions的超载版本'可以用这些论点给出的允许更多

发布于 2025-01-24 21:03:17 字数 2113 浏览 4 评论 0原文

使用Delphi 10,我使用了一个程序在ongreate事件上为Android应用提供多个权限:

  var
  permBatt, permRead, permWrite, permBlue, permAccess, permCoarse: string;
begin
  {$IFDEF ANDROID}

  // Request permissions
  permBatt := JStringToString(TJManifest_permission.JavaClass.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS);
  permRead := JStringToString(TJManifest_permission.JavaClass.READ_EXTERNAL_STORAGE);
  permWrite := JStringToString(TJManifest_permission.JavaClass.WRITE_EXTERNAL_STORAGE);
  permBlue := JStringToString(TJManifest_permission.JavaClass.BLUETOOTH);
  permAccess := JStringToString(TJManifest_permission.JavaClass.ACCESS_FINE_LOCATION);
  permCoarse := JStringToString(TJManifest_permission.JavaClass.ACCESS_COARSE_LOCATION);

  PermissionsService.RequestPermissions([permBatt, permRead, permWrite, permBlue, permAccess, permCoarse], PermissionRequestResult);

 {$ENDIF}

现在在Delphi 11 Alexandria,我收到了一个编译器错误

[DCC Error] data.main.pas(237): E2250 There is no overloaded version of 'RequestPermissions' that can be called with these arguments 

,我尝试使用permississionservice.requeStermiss.requepperrismis.requequestpersimper。 :

const
  permBatt = 'android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS';
  permRead = 'android.permission.READ_EXTERNAL_STORAGE';
  permWrite = 'android.permission.WRITE_EXTERNAL_STORAGE';
  permBlue  = 'android.permission.BLUETOOTH';
  permAccess = 'android.permission.ACCESS_FINE_LOCATION';
  permCoarse = 'android.permission.ACCESS_COARSE_LOCATION';
  {$IFDEF ANDROID}

  PermissionsService.RequestPermissions([permBatt, permRead, permWrite, permBlue, permAccess, permCoarse ],
  procedure(const APermissions: TArray<string>; const AGrantResults: TArray<TPermissionStatus>)
      begin
        if (Length(AGrantResults) = 1) and (AGrantResults[0] = TPermissionStatus.Granted) then
          TDialogService.ShowMessage('OK permessi')
      else
        begin
          TDialogService.ShowMessage('Location permission not granted');
        end;
      end);
  {$ENDIF}

但是错误仍然存​​在,有什么想法吗?谢谢你

with Delphi 10 i used a procedure to give android app multiple permissions on a onCreate Event:

  var
  permBatt, permRead, permWrite, permBlue, permAccess, permCoarse: string;
begin
  {$IFDEF ANDROID}

  // Request permissions
  permBatt := JStringToString(TJManifest_permission.JavaClass.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS);
  permRead := JStringToString(TJManifest_permission.JavaClass.READ_EXTERNAL_STORAGE);
  permWrite := JStringToString(TJManifest_permission.JavaClass.WRITE_EXTERNAL_STORAGE);
  permBlue := JStringToString(TJManifest_permission.JavaClass.BLUETOOTH);
  permAccess := JStringToString(TJManifest_permission.JavaClass.ACCESS_FINE_LOCATION);
  permCoarse := JStringToString(TJManifest_permission.JavaClass.ACCESS_COARSE_LOCATION);

  PermissionsService.RequestPermissions([permBatt, permRead, permWrite, permBlue, permAccess, permCoarse], PermissionRequestResult);

 {$ENDIF}

now in delphi 11 Alexandria I receive a compiler error

[DCC Error] data.main.pas(237): E2250 There is no overloaded version of 'RequestPermissions' that can be called with these arguments 

I tried use the new singnature of PermissionService.RequestPermission passing a procedure as a paramether and using the new Delphi constants:

const
  permBatt = 'android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS';
  permRead = 'android.permission.READ_EXTERNAL_STORAGE';
  permWrite = 'android.permission.WRITE_EXTERNAL_STORAGE';
  permBlue  = 'android.permission.BLUETOOTH';
  permAccess = 'android.permission.ACCESS_FINE_LOCATION';
  permCoarse = 'android.permission.ACCESS_COARSE_LOCATION';
  {$IFDEF ANDROID}

  PermissionsService.RequestPermissions([permBatt, permRead, permWrite, permBlue, permAccess, permCoarse ],
  procedure(const APermissions: TArray<string>; const AGrantResults: TArray<TPermissionStatus>)
      begin
        if (Length(AGrantResults) = 1) and (AGrantResults[0] = TPermissionStatus.Granted) then
          TDialogService.ShowMessage('OK permessi')
      else
        begin
          TDialogService.ShowMessage('Location permission not granted');
        end;
      end);
  {$ENDIF}

but the error is still there, any idea? Thank you so moutch

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

淡淡の花香 2025-01-31 21:03:17

我找到了正确的解决方案,希望它会有所帮助

procedure TMainData.DataModuleCreate(Sender: TObject);
const
permBatt = 'android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS';
permRead = 'android.permission.READ_EXTERNAL_STORAGE';
permWrite = 'android.permission.WRITE_EXTERNAL_STORAGE';
permBlue  = 'android.permission.BLUETOOTH';
permAccess = 'android.permission.ACCESS_FINE_LOCATION';
permCoarse = 'android.permission.ACCESS_COARSE_LOCATION';
begin

{$IFDEF ANDROID}
  PermissionsService.RequestPermissions([permBatt,permRead, permWrite, permBlue, permAccess, permCoarse],
    procedure(const APermissions: TClassicStringDynArray; const AGrantResults: TClassicPermissionStatusDynArray)
    begin
      if (Length(AGrantResults) = 1) and (AGrantResults[0] = TPermissionStatus.Granted) then
        { activate or deactivate the location sensor }
      else
      begin
       TDialogService.ShowMessage('Devi dare il permesso alla localizzazione esplicitamente');
      end;
    end);

 {$ENDIF}
end

I found the right solution and i hope it'll help

procedure TMainData.DataModuleCreate(Sender: TObject);
const
permBatt = 'android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS';
permRead = 'android.permission.READ_EXTERNAL_STORAGE';
permWrite = 'android.permission.WRITE_EXTERNAL_STORAGE';
permBlue  = 'android.permission.BLUETOOTH';
permAccess = 'android.permission.ACCESS_FINE_LOCATION';
permCoarse = 'android.permission.ACCESS_COARSE_LOCATION';
begin

{$IFDEF ANDROID}
  PermissionsService.RequestPermissions([permBatt,permRead, permWrite, permBlue, permAccess, permCoarse],
    procedure(const APermissions: TClassicStringDynArray; const AGrantResults: TClassicPermissionStatusDynArray)
    begin
      if (Length(AGrantResults) = 1) and (AGrantResults[0] = TPermissionStatus.Granted) then
        { activate or deactivate the location sensor }
      else
      begin
       TDialogService.ShowMessage('Devi dare il permesso alla localizzazione esplicitamente');
      end;
    end);

 {$ENDIF}
end
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文