Das leider sehr komplex, besonders wenn noch weitere Permissions gebraucht werden.
Foreground / Background spielt da auch mit rein.
Das ist äusserst behämmert gelöst von Apple, weil es da keine Asynchronen callbacks gibt,
so wie bei Android.
Immerhin kann man den Status abfragen.
Delphi-Quellcode:
function IsAuthorized_Foreground( const AAllowBackgroundOperation : Boolean ) : Boolean;
var
LRes : TAuthorizationType;
begin
// Taken from System.iOS.Sensors
case TCLLocationManager.OCClass.authorizationStatus of
kCLAuthorizationStatusNotDetermined :
LRes := TAuthorizationType.atNotSpecified;
kCLAuthorizationStatusDenied, // by user
kCLAuthorizationStatusRestricted : // maybe globally
LRes := TAuthorizationType.atUnauthorized;
kCLAuthorizationStatusAuthorizedWhenInUse :
begin
if AAllowBackgroundOperation then
begin
LRes := TAuthorizationType.atUnauthorized // this may not be allowed in background
end
else
LRes := TAuthorizationType.atAuthorized; // CAN USE
end;
kCLAuthorizationStatusAuthorizedAlways :
LRes := TAuthorizationType.atAuthorized; // CAN USE
else // avoids compiler warnings
LRes := TAuthorizationType.atNotSpecified;
end;
if LRes = TAuthorizationType.atAuthorized then
begin
Result := True;
end
else
begin
Result := False;
end;
end;
Den Zustand Immer erlauben kann man auch in machen Versionen erst im 2ten Schritt einstellen.
Programmmässig scheint es da keine Möglichkeit zu geben das einzustellen,
oder auch nur die Frage hochkommen zu lassen.
https://medium.com/better-programmin...s-5482abc77961
https://medium.com/@jigarm/core-loca...s-ac2f46848dfc
https://stackoverflow.com/questions/...-time/37471850
Das ist auch abgekündigt und geändert, und scheint auf jedem Phone irgendwie anders zu funktionieren.
Ich bin schon froh wenn die App nicht einfach abstürzt.
Eine einfache Lösung habe ich auch nicht, ich frage regelmässig den Status ab bevor ich weitermache.
Das bringt aber meine bisherigen Abläufe ziemlich Durcheinander.