AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Cross-Platform-Entwicklung PermissionsService.RequestPermissions ist asynchron!
Thema durchsuchen
Ansicht
Themen-Optionen

PermissionsService.RequestPermissions ist asynchron!

Ein Thema von skoschke · begonnen am 3. Jan 2020 · letzter Beitrag vom 3. Jan 2020
Antwort Antwort
skoschke

Registriert seit: 6. Jan 2009
523 Beiträge
 
Delphi 10.4 Sydney
 
#1

PermissionsService.RequestPermissions ist asynchron!

  Alt 3. Jan 2020, 10:25
Hallo,

da Verwendung von Delphi Rio und Devices mit Android 9 hilft das Manifest bei den Berechtigungen nicht wirklich, denn die sind nach Installation der App zwar als Berechtigungen im App-Manager gelistet aber alle abgeschaltet!

nun habe ich PermissionsService.RequestPermissions(...) gefunden, was auch die angeforderten Berechtigungen vom User bei Programmstart abfragt.

Nur kehrt leider der Aufruf von PermissionsService.RequestPermissions sofort zurück und der weitere Programmcode wird abgearbeitet während auf dem Display noch die erste Abfrage ('Speicher lesen / schreiben erlauben...') steht.

Damit aber bekomme ich Laufzeitfehler, da hier jetzt auf den Speicher zugegriffen wird aber die Berechtigung noch nicht vorliegt!

Wie löst man das bzw. bekommt man die App-Berechtigungen mit Rio auf Android 9 sofort bei Installation per Manifest abgefragt und gespeichert?

Danke
Ciao
Stefan
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.199 Beiträge
 
Delphi 10 Seattle Enterprise
 
#2

AW: PermissionsService.RequestPermissions ist asynchron!

  Alt 3. Jan 2020, 10:43
Ist das nicht hier erklärt?

http://docwiki.embarcadero.com/RADSt...rmission_Model
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.960 Beiträge
 
Delphi 12 Athens
 
#3

AW: PermissionsService.RequestPermissions ist asynchron!

  Alt 3. Jan 2020, 10:57
Unter Android und iOS sollte alles asynchron sein. Die eigene Aktion muss schlicht in dem Callback passieren, wenn die Berechtigung vorhanden ist, nicht nach dem Aufruf an RequestPermissions.
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
skoschke

Registriert seit: 6. Jan 2009
523 Beiträge
 
Delphi 10.4 Sydney
 
#4

AW: PermissionsService.RequestPermissions ist asynchron!

  Alt 3. Jan 2020, 11:16
das habe ich ja implementiert:

Delphi-Quellcode:
  PermissionsService.RequestPermissions
    ([JStringToString(TJManifest_permission.JavaClass.WRITE_EXTERNAL_STORAGE)],
    procedure(const APermissions: TArray<string>;
      const AGrantResults: TArray<TPermissionStatus>)
    begin
      if (Length(AGrantResults) = 1) and
        (AGrantResults[0] = TPermissionStatus.Granted) then
      begin
        //erlaubt
      end
      else
      begin
         TDialogService.ShowMessage('Ohne Speicherzugriff kann das Programm nicht arbeiten und wird beendet!');
         Application.Terminate;
      end;
    end);
  // Gerätename wegschreiben
  MakeDeviceInfo(DeviceInfo.diDevice);
aber während noch "Zugriff auf Medien... erlauben" auf dem Display unbeantwortet steht wird schon die Procedure MakeDeviceInfo aufgerufen die auf den (noch nicht erlaubt) Speicher zugreifen will!

Ciao
Stefan
  Mit Zitat antworten Zitat
mensch72

Registriert seit: 6. Feb 2008
838 Beiträge
 
#5

AW: PermissionsService.RequestPermissions ist asynchron!

  Alt 3. Jan 2020, 11:30
nee... hast du nicht implementiert!

dein
"// Gerätename wegschreiben
MakeDeviceInfo(DeviceInfo.diDevice);"
muss da stehen, wo du "//erlaubt" (leer) hin geschrieben hast!

Du solltest dir Konzept und Funktion der asynchronen anonymen Methoden nochmal ganz in Ruhe klarmachen!

Um nicht Probleme mit Ausführung im Thread zu bekommen, könntest du bei "erlaubt" auch einen kurzen 50msec Timer starten und im OnTimer dann dein "// Gerätename wegschreiben" machen. Dann läuft das zuminest wieder im MainThread selbst ab, bzw. das bei "//erlaubt" in ein Syncronize(procedure wegschreiben) packen.

Viel Spaß und Erfolg beim Nachdenken
  Mit Zitat antworten Zitat
Rollo62

Registriert seit: 15. Mär 2007
4.174 Beiträge
 
Delphi 12 Athens
 
#6

AW: PermissionsService.RequestPermissions ist asynchron!

  Alt 3. Jan 2020, 13:12
Das "Application.Terminate;"
sollte man auch weglassen.

Eine App kann sich so einfach nicht selbst beenden, das sollte immer der User machen.
  Mit Zitat antworten Zitat
skoschke

Registriert seit: 6. Jan 2009
523 Beiträge
 
Delphi 10.4 Sydney
 
#7

AW: PermissionsService.RequestPermissions ist asynchron!

  Alt 3. Jan 2020, 13:38
OK, habe das mit dem Callback kapiert

Da kommt aber ein neues Problem:

Das procedure(const APermissions: TArray<string>; Callback wird gar nicht mehr aufgerufen wenn bereits alle Zugriffe erlaubt worden sind!

Ich möchte in der Programm-Unit bzw. in einem Startscreen erst alle Zugriffsrechte holen wenn nicht vorhanden und erst dann soll das eigentliche Programm starten!

Ciao
Stefan
  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 20:25 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz