AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Cross-Platform-Entwicklung Delphi Android-RequestPermissions unter Delphi 11 (keine überladene Version)
Thema durchsuchen
Ansicht
Themen-Optionen

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

Ein Thema von philipp.hofmann · begonnen am 2. Nov 2021 · letzter Beitrag vom 6. Mai 2022
Antwort Antwort
philipp.hofmann

Registriert seit: 21. Mär 2012
Ort: Hannover
898 Beiträge
 
Delphi 10.4 Sydney
 
#1

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

  Alt 2. Nov 2021, 14:03
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
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.202 Beiträge
 
Delphi 10.4 Sydney
 
#2

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

  Alt 2. Nov 2021, 14:13
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.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Starsky911

Registriert seit: 8. Feb 2008
Ort: Bremen
96 Beiträge
 
Delphi 11 Alexandria
 
#3

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

  Alt 2. Nov 2021, 14:21
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.
  Mit Zitat antworten Zitat
philipp.hofmann

Registriert seit: 21. Mär 2012
Ort: Hannover
898 Beiträge
 
Delphi 10.4 Sydney
 
#4

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

  Alt 2. Nov 2021, 14:40
Danke, tut, was es soll.
  Mit Zitat antworten Zitat
zeras

Registriert seit: 11. Mär 2007
Ort: Saalkreis
1.643 Beiträge
 
Delphi 12 Athens
 
#5

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

  Alt 5. Nov 2021, 20:46
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 RequestPermissions bei mir 3 Parameter. Im obigen Beispiel sehe ich nur 2 Parameter.
Was mache ich falsch?
Matthias
Es ist nie falsch das Richtige zu tun!
- Mark Twain
  Mit Zitat antworten Zitat
philipp.hofmann

Registriert seit: 21. Mär 2012
Ort: Hannover
898 Beiträge
 
Delphi 10.4 Sydney
 
#6

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

  Alt 6. Nov 2021, 11:38
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);
  Mit Zitat antworten Zitat
Benutzerbild von Harry Stahl
Harry Stahl

Registriert seit: 2. Apr 2004
Ort: Bonn
2.538 Beiträge
 
Delphi 11 Alexandria
 
#7

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

  Alt 6. Mai 2022, 15:35
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
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:02 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