... ja habe ich gesehen. Deswegen beziehe ich mich ja auch auf die neueren Apple Änderungen, die ja gar nicht mehr soo neu sind. Ich dachte ich frage dich trotzdem, da du an dem Thema zumindest damals dicht dran warst.
Der Code von Rollo ist mir so gar nicht eingängig, danke trotzdem, Rollo!
Hier mein angepasster Code. Ist aber etwas holprig, insbesondere weil beim ersten Aufruf bei blockierten Diensten trotzdem der Toast ("Die nächste Station...") kommt:
Code:
{$IFDEF IOS}
Function DDTCheckLocationAvail: boolean;
var
LSensorArray: TSensorArray;
LSensor: TCustomSensor;
CS: TCustomLocationSensor;
PositionAllowed: boolean;
begin
result := False;
PositionAllowed := true;
TSensorManager.Current.Activate();
try
LSensorArray := TSensorManager.Current.GetSensorsByCategory(TSensorCategory.Location);
for LSensor in LSensorArray do
begin
CS := TCustomLocationSensor(LSensor);
if not CS.Started then
try
CS.Start; // hier gibt es eine
Exception wenn die Positionsdienste NICHT autorisiert wurden!
except
PositionAllowed := False;
result := False;
end;
if PositionAllowed then
if TCustomLocationSensor.TProperty.Latitude IN CS.AvailableProperties then
result := true;
CS.Stop
end;
finally
// TSensorManager.Current.Deactivate; // Soll man machen, lößt aber eine
Exception aus...
end
end;
{$ENDIF IOS}
Aufruf dann so:
Code:
{$IFDEF iOS}
if DDTCheckLocationAvail then
begin
dm.LocationSensor1.Active := true;
dm.Timer1.Enabled := true;
TfgToast.show('Die nächste Station wird bestimmt...', short)
end
else
begin
showmessage('Zugriff auf Positionsdaten wurde verweigert. Bitte ggfl. in den Einstellungen des Gerätes ändern');
dm.LocationSensor1.Active := False;
end
{$ENDIF}