GPS Position

GPS Position

Wir können versuchen uns die letzte bekannte GPS Position von Android per Google Play API direkt zu holen, statt selber nach einer GPS Position zu prüfen. Seit neuestem gibt es nämlich eine Google Play services location API.
Mittels derer wir uns einfach und schnell an der GPS Position bedienen können. Diese Daten sollten halbwegs genau sein, um sie verwenden zu können. Vorausgesetzt natürlich die Daten sind aktuell und GPS ist aktiv.

Als erstes müssen wir wieder eine Berechtigung von Android einholen.
Dies erledigen wir, indem wir folgenden Tag in die “AndroidManifest.xml”-Datei einfügen:

<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"></uses-permission>

Als nächstes wird es etwas kniffliger.
Wir benötigen eine neue Version, des Google Play services. Diese kann man sich über den Android SDK Manager herunterladen. Die Google Play services werden in der Liste ganz unten angezeigt.
Nach dem Herunterladen und der Installation des Google Play services müssen wir eben diesen in unser Projekt einfügen.
Dies erreichen wir, indem wir den SDK Manager wieder schließen. In der linken Liste (in der alle Dateien aufgelistet werden) von Android Studio, klicken wir nun auf den Menüpunkt “Gradle Scripts” und anschließend auf die Datei “build.gradle (Module: app)”.
Dort fügen wir folgendes in die Klammer von “dependencies”:

dependencies {
 ...
 compile 'com.google.android.gms:play-services-location:7.5.0'
 ...
}

Die Versionsnummer betrug bei mir 7.5.0, dies kann bei euch anders sein. Probiert es einfach aus.

Habt ihr es bis hier hin geschafft, dann ist der knifflige Teil auch schon wieder vorüber.
Wir erstellen uns einmal ein Layout, in dem wir unsere GPS Position ausgeben lassen können. Bei  mir sieht das Layout “activity_main.xml”  so aus:

<relativelayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingleft="@dimen/activity_horizontal_margin" android:paddingright="@dimen/activity_horizontal_margin" android:paddingtop="@dimen/activity_vertical_margin" android:paddingbottom="@dimen/activity_vertical_margin" tools:context=".MainActivity">

 <textview android:text="@string/hello_world" android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/textView"></textview>

 <textview android:layout_width="wrap_content" android:layout_height="wrap_content" android:textappearance="?android:attr/textAppearanceMedium" android:text="Längengrad: 0.0" android:id="@+id/textLaengenGrad" android:layout_below="@+id/textView" android:layout_alignparentleft="true" android:layout_alignparentstart="true"></textview>

 <textview android:layout_width="wrap_content" android:layout_height="wrap_content" android:textappearance="?android:attr/textAppearanceMedium" android:text="Breitengrad: 0.0" android:id="@+id/textBreitenGrad" android:layout_below="@+id/textLaengenGrad" android:layout_alignparentleft="true" android:layout_alignparentstart="true"></textview>


</relativelayout>

Ab an die Programmierung:

Leider haben wir noch kein einziges Stückchen wirklich programmiert, das soll sich nun ändern.
Aber keine Sorge, die Hälfte haben wir geschafft.

Da wir nun die Google Play services aktualisiert und importiert haben können wir sie nun nutzen.
Dazu fügen wir diese Klassen “GoogleApiClient.ConnectionCallbacks, GoogleApiClient.OnConnectionFailedListener” als implements an unsere Hauptklasse an. Dies könnte so oder so ähnlich aussehen:


public class MainActivity extends Activity implements GoogleApiClient.ConnectionCallbacks, GoogleApiClient.OnConnectionFailedListener {

Nun sollte uns eine Fehlermeldung angezeigt werden.
Kein Grund zu Panik. Android Studio moniert uns lediglich, dass einige Funktionen fehlen. Diese reichen wir bald nach.
Vorerst benötigen wir noch einige Vorkehrungen.
Denn wir benötigen in jedem Fall noch 2 Variablen. Diese Definieren wir innerhalb unserer Klasse:

//Mit Hilfe dieser können wir später die Position auslesen 
GoogleApiClient mGoogleApiClient;

//Diese Variable beinhaltet später die Positionsdaten
Location mLastLocation;

//Variablen, zur Anzeige der Daten (nicht unbedingt relevant)
TextView l;
TextView b;

Der nächste Schritt der nun nötig ist, ist die Initialisierung des Google Play services und das hinzufügen, der von Android Studio monierten Funktionen.

//Wird beim Start der App aufgerufen
 @Override
 protected void onCreate(Bundle savedInstanceState) {
 super.onCreate(savedInstanceState);
 setContentView(R.layout.activity_main);

 //Aufruf der Initalisierung
 buildGoogleApiClient();

 //Definieren der Textausgabefelder
 l = (TextView) findViewById(R.id.textLaengenGrad);
 b = (TextView) findViewById(R.id.textBreitenGrad);

 //Starten der eben initalisierten API von Google
 mGoogleApiClient.connect();
 }

 //Initalisiert die API von Google, mit der wir die Position auslesen können
 protected synchronized void buildGoogleApiClient() {
 mGoogleApiClient = new GoogleApiClient.Builder(this)
 .addConnectionCallbacks(this)
 .addOnConnectionFailedListener(this)
 .addApi(LocationServices.API)
 .build();
 }

 //Wird aufgerufen, wenn die Verbindung zur Google API aussteht
 @Override
 public void onConnectionSuspended(int i) {}

 //Wird aufgerufen, wenn die Verbindung zur Google API fehlschlägt
 @Override
 public void onConnectionFailed(ConnectionResult connectionResult) {
 l.setText("Längengrad: Da ist ein Fehler aufgetreten.");
 b.setText("Breitengrad: Da ist ein Fehler aufgetreten.");
 }

Letztendlich wird über folgende Funktion die GPS Position empfangen und ausgelesen.
Sie wird von der App eigenständig ausgeführt, sobald eine erfolgreiche Verbindung zu den Google Play services hergestellt wurde.

//Wird aufgerufen, wenn die Verbindung zur Google API erfolgreich ist
@Override
public void onConnected(Bundle connectionHint) {
 //Anhand der erfolgreichen Verbindung die benötigten Daten auslesen
 mLastLocation = LocationServices.FusedLocationApi.getLastLocation(mGoogleApiClient);

 if (mLastLocation != null) {
 //Die ausgelesenen daten verwerten und anzeigen
 l.setText("Längengrad: " + String.valueOf(mLastLocation.getLongitude()));
 b.setText("Breitengrad: " + String.valueOf(mLastLocation.getLatitude()));
 }
}


Marvin

Ich bin ein Mensch, der sich neben der Programmierung noch für tausend andere Dinge interessiert, die mal mehr und mal weniger verrückt sind. Vor allem aber bin ich Feuer und Flamme mit der Programmierung von eigenen kleinen Apps und Programmen, die mein Leben bereichern.

Hat dir dieser Artikel gefallen?

Kommentar hinzufügen

*Pflichtfeld