Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Cross-Platform-Entwicklung (https://www.delphipraxis.net/91-cross-platform-entwicklung/)
-   -   Feststellen ob das GPS empfang besteht (https://www.delphipraxis.net/195144-feststellen-ob-das-gps-empfang-besteht.html)

QuickAndDirty 6. Feb 2018 09:09

Feststellen ob das GPS empfang besteht
 
Hallo,
Ich möchte ermitteln ob GPS empfang besteht.
TLocattionSensor hat nur das Ereignis OnLocationchanged, welches ja nur ausgelöst wird wenn sich die Location signifikant ändert.
Wenn ich aber im Lastwagen wo anders hinfahre und in der Zeit keinen GPS Empfang habe ändert sich der Ort nicht...
Ich möchte mitbekommen wenn die "letzten Koordinaten" nichts mehr mit dem GPS signal zu tun haben.

Neutral General 6. Feb 2018 14:41

AW: Feststellen ob das GPS empfang besteht
 
Soweit ich das in der Doku sehe müsstest du das mit locationSensor.Sensor.State abfragen können. (Notfalls im Timer oder so weils ja kein Event gibt :| )

QuickAndDirty 7. Feb 2018 15:15

AW: Feststellen ob das GPS empfang besteht
 
Meinst du NODATA
?

QuickAndDirty 8. Feb 2018 15:31

AW: Feststellen ob das GPS empfang besteht
 
locationSensor.Sensor.State liefert immer Ready.

himitsu 8. Feb 2018 17:02

AW: Feststellen ob das GPS empfang besteht
 
Nja, Ready könnte auch nur heißen der Sensor ist aktiv (was auch nicht stimmt), was aber noch nicht heißen müsste, dass er auch Empfang hat.

Zitat:

Zitat von QuickAndDirty (Beitrag 1393389)
locationSensor.Sensor.State liefert immer Ready.

Dazu gibt es Mehreres
z.B. https://forums.embarcadero.com/threa...hreadID=228892

QuickAndDirty 9. Feb 2018 11:05

AW: Feststellen ob das GPS empfang besteht
 
Zitat:

Zitat von himitsu (Beitrag 1393394)
Nja, Ready könnte auch nur heißen der Sensor ist aktiv (was auch nicht stimmt), was aber noch nicht heißen müsste, dass er auch Empfang hat.

Zitat:

Zitat von QuickAndDirty (Beitrag 1393389)
locationSensor.Sensor.State liefert immer Ready.

Dazu gibt es Mehreres
z.B. https://forums.embarcadero.com/threa...hreadID=228892

Ich hab jetzt intesive tests mit den Delphisamples SensorInfo und LocationDemoProject
durchgeführt...um auszuschließen das nicht mein Projekt einfach falsch an die Sache dran geht.

LocationDemoProject habe ich leicht modifiziert , so dass es im Überschriften label LocationsSensor.Sensor.Latitutude.tostring anzeigt.

Ich simuliere schlechten GPS Empfang bzw. guten GPS Empfang

Setup:
-Handy ist im Büro
-Alle Standorddienste aus, außer GPS
Anzeige:
Latitude= NAN

Setup änderung während des betriebs der APP im hintergrund:
-Handy ist im Büro
-Alle Standorddienste an
Anzeige:
Latitude=Sinvoller wert

Setup änderung während des betriebs der APP im hintergrund:
-Handy ist im Büro
-Alle Standorddienste aus, außer GPS
Anzeige:
Latitude=Sinvoller wert !!!!!!!!!!!!!!!!//Das sollte wieder zu NAN wechseln , voll daneben

Setup:
-Handy ist im Büro
-Alle Standorddienste aus, außer GPS
-Locationsensor.Active AUS und ANgeschaltet
Anzeige:
Latitude=Sinvoller wert !!!!!!!!!!!!!!!!//Das sollte wieder zu NAN wechseln , voll daneben

Setup:
-Handy ist im Büro
-Alle Standorddienste aus, außer GPS
-Neustart der APP

Anzeige:
Latitude= NAN

:(

Rollo62 9. Feb 2018 12:28

AW: Feststellen ob das GPS empfang besteht
 
Zitat:

Locationsensor.Active AUS
Also geht es dir darum ob Location aktiv ist, oder ob ein aktiver Location mit korrekten GPS-Ergebnissen arbeitet ?

Ersteres kann man ja abfangen, zweiteres wird schwierig festzustellen ob GPS mal kurz gestört ist weil ein Tesla vorbeifliegt.

Ersteres z.B. so:

Delphi-Quellcode:
function IsGPSActive(useHIGH_ACCURACY: Boolean = False): Boolean;
var
    Provider: string;
    LocationMode: integer;

begin
    if TOSVersion.Check(4, 4) then
    begin
      LocationMode := TJSettings_Secure.JavaClass.getInt(TAndroidHelper.Context.getContentResolver,
        TJSettings_Secure.JavaClass.LOCATION_MODE);
      if HIGH_ACCURACY then //ToDo: Check if this is correct
        Result := LocationMode <> TJSettings_Secure.JavaClass.LOCATION_MODE_HIGH_ACCURACY
      else
        Result := LocationMode <> TJSettings_Secure.JavaClass.LOCATION_MODE_OFF;
    end
    else
    begin
      Provider := JStringToString(TJSettings_Secure.JavaClass.GetString(TAndroidHelper.Context.getContentResolver,
        TJSettings_system.JavaClass.LOCATION_PROVIDERS_ALLOWED));
      if useHIGH_ACCURACY then
        Result := Pos('gps', Provider) > 0
      else
        Result := (Pos('network', Provider) > 0) or (Pos('gps', Provider) > 0);
    end;

end;
Rollo

QuickAndDirty 9. Feb 2018 13:04

AW: Feststellen ob das GPS empfang besteht
 
Es geht mir darum rauszukriegen ob GPS gestört ist.
Ich will dem Benutzer mitteilen dass die aktuelle Aktivität nicht mit einer aktuellen Koordinate verknüft wird. Sondern mit der Letzten die sich die APP gemerkt hat.
Leider merkt sich der Dumme Sensor die Koordinaten auch, statt einfach zu melden was Sache ist.

LocationSensor1.Active := False;
LocationSensor1.Active := true;

Hilft nicht

LocationSensor1.Sensor.Stop;
LocationSensor1.Sensor.Start;

hilft schonmal nicht

App aus
App An
hilft...


LocationSensor1.Sensor.Manager.Active := false;
LocationSensor1.Active := true;

hat auch keine Änderung der Koordinaten zu NAN zu Folge...

Das Problem ist, dass die letzte Koordinate oft die ist die vorm Einsteigen in ein Fahrzeug der Firma erfasst wurde. Und das kann sehr weit ab vom realen Standort sein.

Rollo62 9. Feb 2018 13:41

AW: Feststellen ob das GPS empfang besteht
 
Ich würd mal versuchen mich in den LocationChage Event zu hängen, und schauen ob der regelmäßig kommt.
Wenn z.B. 5 Min kein LocationChange kommt hönnte man den Weert verwerfen.

Ich benutze aber die Location vom Phone, und i.d.R. sind die Werte im LocationChange Event OK.
Hier gibt es kaum einen Grund das doppelt zu verifizieren.
Wenn dir das nicht reicht würde ich mal bei Android googeln.

Rollo

QuickAndDirty 9. Feb 2018 15:00

AW: Feststellen ob das GPS empfang besteht
 
Zitat:

Zitat von Rollo62 (Beitrag 1393457)
Ich würd mal versuchen mich in den LocationChage Event zu hängen, und schauen ob der regelmäßig kommt.
Wenn z.B. 5 Min kein LocationChange kommt hönnte man den Weert verwerfen.

Ich benutze aber die Location vom Phone, und i.d.R. sind die Werte im LocationChange Event OK.
Hier gibt es kaum einen Grund das doppelt zu verifizieren.
Wenn dir das nicht reicht würde ich mal bei Android googeln.

Rollo

Ja es gibt ne ganze Website über strategien zur standorfeststellung :(
Könnte dann nen Kontent Provider schreiben der mir mitteilen kann ob es einen GPS-fix gibt oder nicht.

Das mit dem Alter der Koordinaten habe ich mir auch schon gedacht. Aber es gibt ja auch leute die sich ewig in Hallen, Läden oder Kellern aufhalten, und da ist ja die letzte Koordinate vielleicht sogar die richtige. (direkt vor dem Gebäude)

Im prinzip liegt das Problem bei einem Kunden der nicht hinnehmen will, dass seine Mitarbeiter halt nicht immer korrekte Koordinaten mit ihrem Handy erfassen, weil GPS nun mal so funktioniert wie es funktioniert, kommt manchmal auch 0,0 raus....
Koordinaten von 0,0 kann ich als "Fehler" erkennen und dem User raten sich doch mal nen GPS-fix für sein handy an der Fensterscheibe zu besorgen...
Nur falsche Koodrinaten sind halt nicht erkennbar.


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:59 Uhr.
Seite 1 von 2  1 2      

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