Das GPS ist ein wichtiges Feature vieler Android-Geräte.
Glücklicherweise ist es ziemlich einfach, mit ihm zu arbeiten.
In diesem Tutorial werden wir ein einfaches Programm erstellen, das die aktuelle Position sowie den Satelliten-Status anzeigt.
Das komplette Programm befindet sich am Ende.
Das Englische Originaltutorial.
Die GPS Funktionen befinden sind in der GPS Library.
Wir müssen deshalb zuerst eine Referenz zu dieser Library erstellen:
Es gibt drei Arten von relevanten Objekten. Das wichtigste davon ist GPS.
Das GPS Objekt verwaltet die Verbindung und die Events (Ereignisse). Das zweite Objekt ist Location.
Eine Location ist eine Struktur, die die verfügbaren Daten über einen bestimmten "fix" enthält. Die Daten umfassen die Längen-und Breitengrad-Koordinaten, die Zeit (ausgedrückt als Ticks) für dieses "fix" und andere Informationen wie Peilung, Höhe und so weiter.
Es kann vorkommen, dass nicht alle Informationen verfügbar sind (aufgrund schlechten Empfangs zum Beispiel).
Das Location Objekt umfaßt auch andere Funktionen wie die Berechnung der Entfernung und Peilung zu einem anderen Ort und Methoden, um die Koordinaten String-Formate umzuwandeln.
Normalerweise arbeitet man mit Location-Objekten die von LocationChanged Event übergeben wurden. Sie können aber auch solche Objekte selbst initialisieren (dies ist nützlich für die Berechnung der Entfernung und Peilung zwischen Standorten).
Das letzte Objekt ist GPSSatellite. Dies ist eine Struktur, die verschiedene Informationen über die derzeit bekannten Satelliten enthält. Es wird im GPSStatus Event übergeben.
Zurück zum GPS.
Das GPS-Objekt muß als Process_Global Objekt deklariert werden. Ansonsten würden jedes Mal neuen Instanzen erstellt werden wenn die Activity neu erstellt wird.
Der erste Schritt ist das Objekt zu initialisieren. Wie viele andere Initialize-Methoden erwartet diese auch einen EventName Parameter. Dies ist das Präfix für die Events, die vom GPS-Objekt ausgelöst werden.
Hier ist der komplette Code:
Der nächste Schritt ist dem GPS mitzuteilen daß es auf Daten 'hören' soll. Das GPS kann relativ viel Akkuenergie verbrauchen. Deshalb ist es empfehlenswert, das GPS abzustellen wenn es nicht notwendig ist. Es wird empfohlen, das 'Abhören' in der Activity_Resume Routine zu starten und in der Activity_Pause Routine abzustellen.
Es kann vorkommen, dass der Benutzer das GPS ausgeschaltet hat. Aus Datenschutzgründen erlaubt das Android OS nicht das GPS programmatisch einzuschalten. Das Beste, was Sie tun können, ist den Benutzer zu fragen das GPS-Gerät wieder zu aktivieren.
Der folgende Code zeigt eine Nachricht, wenn das GPS nicht aktiviert ist und öffnet auch das GPS-Bedienfeld, damit der Benutzer nur die GPS-Option zu überprüfen braucht:
Wenn das GPS aktiviert ist wir fangen an, auf Daten zu 'hören'. Die Start-Methode enthält zwei Werte, die minimale Zeit (in Millisekunden) und der minimale Abstand (Meter) zwischen den Events. Ein Event wird ausgelöst, wenn mindestens eines dieser Kriterien erfüllt ist. Dies kann helfen, Batterieenergie zu sparen.
In unserem Fall geben wir 0 ein und erhalten dafür alle "fix" Events.
Das GPS löst drei Events aus:
- GPS_LocationChanged (Location1 As Location)
Dies ist das Hauptevent. Location1 enthält alle Daten für das neue "fix".
-GPS_GpsStatus (Satellites As List)
Dieses Event zeigt Informationen über die aktuell verfügbaren Satelliten an. Beachten Sie, dass nicht alle Satelliten in der Liste tatsächlich für die Berechnung des letzten Standpunktes (fix) verwendet wurden. So ist es möglich, daß die Liste mehrere Satelliten umfassen kann, der Empfang aber trotzdem immer noch nicht gut genug ist für eine Rechnung.
- GPS_UserEnabled (Enabled As Boolean)
Dieses Event wird jedes mal ausgelöst wenn der Benutzer den GPS-Status ändert. Es wird auch nach jedem Startaufruf ausgelöst.
Das komplette Programm:
GPS.zip
Glücklicherweise ist es ziemlich einfach, mit ihm zu arbeiten.
In diesem Tutorial werden wir ein einfaches Programm erstellen, das die aktuelle Position sowie den Satelliten-Status anzeigt.
Das komplette Programm befindet sich am Ende.
Das Englische Originaltutorial.
Die GPS Funktionen befinden sind in der GPS Library.
Wir müssen deshalb zuerst eine Referenz zu dieser Library erstellen:
Es gibt drei Arten von relevanten Objekten. Das wichtigste davon ist GPS.
Das GPS Objekt verwaltet die Verbindung und die Events (Ereignisse). Das zweite Objekt ist Location.
Eine Location ist eine Struktur, die die verfügbaren Daten über einen bestimmten "fix" enthält. Die Daten umfassen die Längen-und Breitengrad-Koordinaten, die Zeit (ausgedrückt als Ticks) für dieses "fix" und andere Informationen wie Peilung, Höhe und so weiter.
Es kann vorkommen, dass nicht alle Informationen verfügbar sind (aufgrund schlechten Empfangs zum Beispiel).
Das Location Objekt umfaßt auch andere Funktionen wie die Berechnung der Entfernung und Peilung zu einem anderen Ort und Methoden, um die Koordinaten String-Formate umzuwandeln.
Normalerweise arbeitet man mit Location-Objekten die von LocationChanged Event übergeben wurden. Sie können aber auch solche Objekte selbst initialisieren (dies ist nützlich für die Berechnung der Entfernung und Peilung zwischen Standorten).
Das letzte Objekt ist GPSSatellite. Dies ist eine Struktur, die verschiedene Informationen über die derzeit bekannten Satelliten enthält. Es wird im GPSStatus Event übergeben.
Zurück zum GPS.
Das GPS-Objekt muß als Process_Global Objekt deklariert werden. Ansonsten würden jedes Mal neuen Instanzen erstellt werden wenn die Activity neu erstellt wird.
Der erste Schritt ist das Objekt zu initialisieren. Wie viele andere Initialize-Methoden erwartet diese auch einen EventName Parameter. Dies ist das Präfix für die Events, die vom GPS-Objekt ausgelöst werden.
Hier ist der komplette Code:
B4X:
Sub Process_Globals
Dim GPS1 As GPS
End Sub
Sub Globals
Dim lblLon As Label
Dim lblLat As Label
Dim lblSpeed As Label
Dim lblSatellites As Label
End Sub
Sub Activity_Create(FirstTime As Boolean)
If FirstTime Then
GPS1.Initialize("GPS")
End If
Activity.LoadLayout("1")
End Sub
Sub Activity_Resume
If GPS1.GPSEnabled = False Then
ToastMessageShow("Please enable the GPS device.", True)
StartActivity(GPS1.LocationSettingsIntent) 'Will open the relevant settings screen.
Else
GPS1.Start(0, 0) 'Listen to GPS with no filters.
End If
End Sub
Sub Activity_Pause (UserClosed As Boolean)
GPS1.Stop
End Sub
Sub GPS_LocationChanged (Location1 As Location)
lblLat.Text = "Lat = " & Location1.ConvertToMinutes(Location1.Latitude)
lblLon.Text = "Lon = " & Location1.ConvertToMinutes(Location1.Longitude)
lblSpeed.Text = "Speed = " & Location1.Speed
End Sub
Sub GPS_UserEnabled (Enabled As Boolean)
ToastMessageShow("GPS device enabled = " & Enabled, True)
End Sub
Sub GPS_GpsStatus (Satellites As List)
lblSatellites.Text = "Satellites:" & CRLF
For i = 0 To Satellites.Size - 1
Dim Satellite As GPSSatellite
Satellite = Satellites.Get(i)
lblSatellites.Text = lblSatellites.Text & CRLF & Satellite.Prn & _
" " & Satellite.Snr & " " & Satellite.UsedInFix & " " & Satellite.Azimuth _
& " " & Satellite.Elevation
Next
End Sub
Es kann vorkommen, dass der Benutzer das GPS ausgeschaltet hat. Aus Datenschutzgründen erlaubt das Android OS nicht das GPS programmatisch einzuschalten. Das Beste, was Sie tun können, ist den Benutzer zu fragen das GPS-Gerät wieder zu aktivieren.
Der folgende Code zeigt eine Nachricht, wenn das GPS nicht aktiviert ist und öffnet auch das GPS-Bedienfeld, damit der Benutzer nur die GPS-Option zu überprüfen braucht:
B4X:
Sub Activity_Resume
If GPS1.GPSEnabled = False Then
ToastMessageShow("Please enable the GPS device.", True)
StartActivity(GPS1.LocationSettingsIntent) 'Will open the relevant settings screen.
Else
GPS1.Start(0, 0) 'Listen to GPS with no filters.
End If
End Sub
In unserem Fall geben wir 0 ein und erhalten dafür alle "fix" Events.
Das GPS löst drei Events aus:
- GPS_LocationChanged (Location1 As Location)
Dies ist das Hauptevent. Location1 enthält alle Daten für das neue "fix".
-GPS_GpsStatus (Satellites As List)
Dieses Event zeigt Informationen über die aktuell verfügbaren Satelliten an. Beachten Sie, dass nicht alle Satelliten in der Liste tatsächlich für die Berechnung des letzten Standpunktes (fix) verwendet wurden. So ist es möglich, daß die Liste mehrere Satelliten umfassen kann, der Empfang aber trotzdem immer noch nicht gut genug ist für eine Rechnung.
- GPS_UserEnabled (Enabled As Boolean)
Dieses Event wird jedes mal ausgelöst wenn der Benutzer den GPS-Status ändert. Es wird auch nach jedem Startaufruf ausgelöst.
Das komplette Programm:
Last edited: