Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Cross-Platform-Entwicklung (https://www.delphipraxis.net/91-cross-platform-entwicklung/)
-   -   Delphi Android-RequestPermissions unter Delphi 11 (keine überladene Version) (https://www.delphipraxis.net/209148-android-requestpermissions-unter-delphi-11-keine-ueberladene-version.html)

philipp.hofmann 2. Nov 2021 13:03


Android-RequestPermissions unter Delphi 11 (keine überladene Version)
 
Hi,

ist irgendetwas an meiner Delphi 11 Installation krum oder warum taugt die bisherige RequestPermissions-Implementierung nicht mehr. Unter Delphi 10.4.2 funktioniert es unter Delphi 11 kommt die folgende Fehlermeldung:

[DCC Fehler] E2250 Es gibt keine überladene Version von 'RequestPermissions', die man mit diesen Argumenten aufrufen kann

Delphi-Quellcode:
procedure TicTrainerF.requestBLEPermissions();
begin
  if (requestedBLEPermissions) then
    exit;
  PermissionsService.RequestPermissions(['android.permission.ACCESS_COARSE_LOCATION', 'android.permission.ACCESS_FINE_LOCATION'], LocationPermissionRequestResult);
end;

procedure LocationPermissionRequestResult(Sender: TObject; const APermissions: TArray<string>; const AGrantResults: TArray<TPermissionStatus>);
var i: Integer;
begin
  if ((length(AGrantResults) = 2) and (AGrantResults[0] = TPermissionStatus.Granted) and (AGrantResults[1] = TPermissionStatus.Granted)) then
  begin
    log.d('User granted Location-Android-permission for BLE', True);
    requestedBLEPermissions:=True;
  end else begin
    log.d('Not all Location-Android-permission for BLE granted (' + IntToStr(length(AGrantResults)) + ')', True);
    for i:=0 to length(AGrantResults) - 1 do
    begin
      if (AGrantResults[i] = TPermissionStatus.Granted) then
        log.d(IntToStr(i) + ': granted', True)
      else
        log.d(IntToStr(i) + ': not granted', True)
    end;
  end;
end;
Ich hatte generell den Fehler gemacht, dass ich einige Delphi-Einstellungen via EMBT-Tool von 10.4.2 nach 11.0 gezogen habe, da musste ich im Nachhinein einiges reparieren, da so auch blind ganz viele Einträge mit 270 und sydney mitgezogen wurden (das hätte ich von der Funktion besser erwartet), daher kann ich nicht ausschließen, dass ich hier beim reparieren etwas kaputt gemacht habe.
Die Signatur der Methode RequestPermissions hat sich nicht geändert, so weit bin ich schon mal.

Grüße, Philipp

Bernhard Geyer 2. Nov 2021 13:13

AW: Android-RequestPermissions unter Delphi 11 (keine überladene Version)
 
Wird evtl. LocationPermissionRequestResult aus einer anderen Unit gezogen, als auf das sich die Funktion bei der Deklaration bezieht.
Hatte ich auch schon bei Versionsupdate das Problem das sich Konstanten auf einmal in anderen Units befanden und dann andere Konstanten/Aufzählungen mit zufällig gleichen Namen gezogen wurden.

Starsky911 2. Nov 2021 13:21

AW: Android-RequestPermissions unter Delphi 11 (keine überladene Version)
 
Delphi-Quellcode:
procedure TicTrainerF.requestBLEPermissions();
begin
  if (requestedBLEPermissions) then
    exit;
  PermissionsService.RequestPermissions(['android.permission.ACCESS_COARSE_LOCATION', 'android.permission.ACCESS_FINE_LOCATION'], LocationPermissionRequestResult);
end;

// Delphi 10.x
//procedure LocationPermissionRequestResult(Sender: TObject; const APermissions: TArray<string>; const AGrantResults: TArray<TPermissionStatus>);
// Delphi 11
procedure LocationPermissionRequestResult(Sender: TObject; const APermissions: TClassicStringDynArray; const AGrantResults: TClassicPermissionStatusDynArray);
var i: Integer;
begin
  if ((length(AGrantResults) = 2) and (AGrantResults[0] = TPermissionStatus.Granted) and (AGrantResults[1] = TPermissionStatus.Granted)) then
  begin
    log.d('User granted Location-Android-permission for BLE', True);
    requestedBLEPermissions:=True;
  end else begin
    log.d('Not all Location-Android-permission for BLE granted (' + IntToStr(length(AGrantResults)) + ')', True);
    for i:=0 to length(AGrantResults) - 1 do
    begin
      if (AGrantResults[i] = TPermissionStatus.Granted) then
        log.d(IntToStr(i) + ': granted', True)
      else
        log.d(IntToStr(i) + ': not granted', True)
    end;
  end;
end;
So sollte es funktionieren.

philipp.hofmann 2. Nov 2021 13:40

AW: Android-RequestPermissions unter Delphi 11 (keine überladene Version)
 
Danke, tut, was es soll.

zeras 5. Nov 2021 19:46

AW: Android-RequestPermissions unter Delphi 11 (keine überladene Version)
 
Zitat:

Zitat von Starsky911 (Beitrag 1496958)
Delphi-Quellcode:
procedure TicTrainerF.requestBLEPermissions();
begin
  if (requestedBLEPermissions) then
    exit;
  PermissionsService.RequestPermissions(['android.permission.ACCESS_COARSE_LOCATION', 'android.permission.ACCESS_FINE_LOCATION'], LocationPermissionRequestResult);
end;

Ich wollte das Beispiel auch anwenden, nur hat
Delphi-Quellcode:
RequestPermissions
bei mir 3 Parameter. Im obigen Beispiel sehe ich nur 2 Parameter.
Was mache ich falsch?

philipp.hofmann 6. Nov 2021 10:38

AW: Android-RequestPermissions unter Delphi 11 (keine überladene Version)
 
Beim dritten Parameter gilt das gleiche, auch dort habe ich auf TClassicStringDynArray umgestellt:

Delphi-Quellcode:
    PermissionsService.RequestPermissions([fPermissionCamera],CameraPermissionRequestResult, ExplainReason);
    //neu:
    procedure CameraPermissionRequestResult(Sender: TObject; const APermissions: TClassicStringDynArray; const AGrantResults: TClassicPermissionStatusDynArray);
    procedure ExplainReason(Sender: TObject; const APermissions: TClassicStringDynArray; const APostRationaleProc: TProc);
    //alt:
    //procedure CameraPermissionRequestResult(Sender: TObject; const APermissions: TArray<string>; const AGrantResults: TArray<TPermissionStatus>);
    //procedure ExplainReason(Sender: TObject; const APermissions: TArray<string>; const APostRationaleProc: TProc);

Harry Stahl 6. Mai 2022 14:35

AW: Android-RequestPermissions unter Delphi 11 (keine überladene Version)
 
Info: so ein ähnliches Problem hatte ich auch gerade, allerdings mit einem anderen Aufruf der Requestpermissions.

Dankenswerterweise hat EMBA die Demos angepasst, so dass ich da nachsehen konnte, wie ich den Aufruf verwenden muss, zu finden hier:

C:\Users\Public\Documents\Embarcadero\Studio\22.0\ Samples\Object Pascal\Mobile Snippets\PhoneDialer\PhoneDialer.dproj


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:25 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz