Advertisement
  1. Code
  2. Android SDK

Wie man mit Geofences unter Android arbeitet kann

by
Read Time:14 minsLanguages:

German (Deutsch) translation by Nikol Angelowa (you can also view the original English article)

Standortbezogene Ressourcen ermöglichen Ihrer Anwendung die Interaktion mit der physischen Welt und sind ideal, um die Benutzerinteraktion zu erhöhen. Obwohl viele mobile Apps sie verwenden, ist das Thema dieses Tutorials eine häufig übersehene Funktion, das Geofencing.

Ein Geofence ist ein virtueller Umkreis, der auf einem realen geografischen Gebiet festgelegt ist. Durch die Kombination einer Benutzerposition mit einem Geofence-Umkreis kann festgestellt werden, ob sich der Benutzer innerhalb oder außerhalb des Geofence befindet oder ob er den Bereich verlässt oder betritt.

A geofence knows if a location is inside or outside its delimited areaA geofence knows if a location is inside or outside its delimited areaA geofence knows if a location is inside or outside its delimited area

Stellen Sie sich eine Universitäts-App vor, mit der Sie feststellen können, welche Kollegen und Professoren sich derzeit auf dem Campus befinden. Oder eine App für ein Einkaufszentrum, das Stammkunden belohnt. Es gibt viele andere interessante Möglichkeiten, die Sie erkunden können.

In diesem Lernprogramm erfahren Sie, wie Sie Geofences unter Android verwenden, indem Sie eine Anwendung erstellen, die dem Benutzer eine Benachrichtigung anzeigt, wenn er einen Geofence betritt oder verlässt. Es ist hilfreich, wenn Sie über Vorkenntnisse in Google Play Services, der Google Maps Android API oder IntentService verfügen. Wenn Sie dies nicht tun, können Sie trotzdem mitmachen, aber Sie möchten möglicherweise nach dem Lesen dieses Tutorials Nachforschungen zu diesen Themen anstellen.

1. Geofences auf Android

Unter Android gibt es verschiedene Möglichkeiten, mit Geofences zu arbeiten. Sie können sogar eine eigene Implementierung für die Arbeit mit Geofences erstellen. Die Verwendung von GeofencingApi von Google ist jedoch einfacher.

Diese APIs sind Teil der Location-APIs von Google. Es enthält Geofence, GeofencingRequest, GeofenceApi, GeofencingEvent und GeofenceStatusCodes. In diesem Tutorial verwenden wir diese Klassen, um Geofences zu erstellen und damit zu arbeiten.

Geofence-Schnittstelle

Geofence ist eine Schnittstelle, die ein geografisches Gebiet darstellt, das überwacht werden sollte. Es wird mit dem Geofence.Builder erstellt. Während der Erstellung legen Sie die überwachte Region, das Ablaufdatum des Geofence, die Reaktionsfähigkeit, eine Kennung und die Art der Übergänge fest, nach denen gesucht werden soll.

Um den Stromverbrauch so gering wie möglich zu halten, wird empfohlen, in den meisten Situationen einen Geofence mit einem Radius von mindestens 100 Metern zu verwenden. Wenn sich Geofences auf dem Land befinden, sollten Sie den Radius auf 500 Meter oder mehr erhöhen, um sicherzustellen, dass die Geofences wirksam sind.

Geofence-Übergänge

  • GEOFENCE_TRANSITION_DWELL gibt an, dass der Benutzer den Bereich betreten und einige Zeit dort verbracht hat. Es ist nützlich, mehrere Warnungen zu vermeiden, wenn der Benutzer den Bereich zu schnell betritt und verlässt. Sie können die Verweilzeit mit dem Parameter setLoiteringDelay konfigurieren.
  • GEOFENCE_TRANSITION_ENTER gibt an, wann der Benutzer den überwachten Bereich betritt.
  • GEOFENCE_TRANSITION_EXIT gibt an, wann der Benutzer die Region verlässt.

GeofenceRequest

Die GeofencingRequest-Klasse empfängt die Geofences, die überwacht werden sollen. Sie können eine Instanz erstellen, indem Sie einen Builder verwenden, einen Geofence oder eine List<Geofence> übergeben und die Art der Benachrichtigung festlegen, die beim Erstellen des Geofences ausgelöst wird.

GeofencingApi

Die GeofencingApi-Klasse ist der Einstiegspunkt für alle Interaktionen mit der Geofencing-API von Google. Es ist Teil der Location-APIs und hängt von einem GoogleApiClient ab. Mit GeofencingApi können Sie Geofences hinzufügen und entfernen.

Um einen Geofence hinzuzufügen, rufen Sie die Methode addGeofence() auf. Es überwacht den angegebenen Bereich anhand der an GeofencingRequest übergebenen Einstellungen und erstellt einen PendingIntent, wenn ein Geofence-Übergang beim Betreten oder Verlassen des Bereichs stattfindet.

Um den Geofence zu entfernen, rufen Sie removeGeofences() auf. Sie können den Geofence entweder mithilfe seiner Anforderungskennung oder seiner ausstehenden Absicht entfernen.

2. Erstellen einer Geofencing-App

In diesem Tutorial erstellen wir eine einfache Anwendung, die den Benutzerstandort überwacht und eine Benachrichtigung sendet, wenn der Benutzer einen geofenced Bereich betritt oder verlässt. Die App besteht nur aus einer Activity und einem IntentService. Wir werfen auch einen kurzen Blick auf GoogleMap, GoogleApiClient und FusedLocationProviderApi und untersuchen einige Einschränkungen der Geofence-API.

App ScreenshotApp ScreenshotApp Screenshot

Schritt 1: Projekteinrichtung

GeofencingApi ist Teil der Google Play Services. Um darauf zugreifen zu können, müssen Sie Ihre Entwicklungsumgebung korrekt einrichten und eine Instanz von GoogleApiClient erstellen. Erstellen Sie ein neues Projekt mit einer leeren Activity, bearbeiten Sie die build.gradle-Datei des Projekts wie unten gezeigt und synchronisieren Sie Ihr Projekt.

Schritt 2: Berechtigungen

Wir müssen die richtigen Berechtigungen festlegen, um Geofences zu erstellen und zu verwenden. Fügen Sie dem Manifest des Projekts die folgende Berechtigung hinzu:

Ab Android 6.0 bittet die App zur Laufzeit und nicht während der Installation um Erlaubnis. Wir werden dies später im Tutorial ansprechen.

Schritt 3: Erstellen des Layouts

Das Projekt besteht aus einem Layout, dem MainActivity-Layout. Es enthält den aktuellen Breiten- und Längengrad des Geräts sowie ein GoogleMap-Fragment, in dem die Geofences und die Position des Benutzers angezeigt werden.

Da activity_main.xml ziemlich einfach ist, möchte ich mich nur auf das MapFragment-Element konzentrieren. Sie können sich das fertige Layout in den Quelldateien dieses Tutorials ansehen.

Schritt 4: Google Maps API-Schlüssel

Da wir ein MapFragment verwenden, müssen wir eine GoogleMap-Instanz einrichten und initialisieren. Zunächst müssen Sie einen API-Schlüssel erhalten. Wenn Sie einen API-Schlüssel haben, fügen Sie ihn dem Projektmanifest hinzu.

Beginnen wir mit der GoogleMap-Instanz. Implementieren Sie GoogleMap.OnMapReadyCallback, GoogleMap.OnMapClickListener und GoogleMap.OnMarkerClickListener in der Activity-Klasse und initialisieren Sie die Karte.

Schritt 5: GoogleApiClient

Um die GeofencingApi-Oberfläche verwenden zu können, benötigen wir einen GoogleApiClient-Einstiegspunkt. Implementieren Sie in der Activity einen GoogleApiClient.ConnectionCallbacks und einen GoogleApiClient.OnConnectionFailedListener wie unten gezeigt.

Schritt 6: FusedLocationProviderApi

Wir müssen auch auf den aktuellen Standort des Benutzers zugreifen. Die FusedLocationProviderApi-Schnittstelle gibt uns diese Informationen und ermöglicht eine umfassende Kontrolle der Standortanforderung. Dies ist sehr wichtig, da Standortanforderungen einen direkten Einfluss auf den Batterieverbrauch des Geräts haben.

Implementieren wir nun einen LocationListener. Überprüfen Sie, ob der Benutzer der Anwendung die entsprechenden Berechtigungen erteilt hat, indem Sie die Location-Anforderung erstellen, und zeigen Sie den aktuellen Standort auf dem Bildschirm an.

Es ist wichtig zu beachten, dass die oben erstellte LocationRequest nicht für eine Produktionsumgebung optimiert ist. Das UPDATE_INTERVAL ist zu kurz und würde zu viel Batteriestrom verbrauchen. Eine realistischere Konfiguration für die Produktion könnte sein:

Schritt 7: GoogleMap-Marker

Unsere Activity benötigt zwei verschiedene Marker. Ein locationMarker verwendet den vom FusedLocationProviderApi angegebenen Breiten- und Längengrad, um den aktuellen Standort des Geräts zu ermitteln. Ein geoFenceMarker ist das Ziel für die Geofence-Erstellung, da er die letzte Berührung auf der Karte verwendet, um seine Position abzurufen.

Schritt 8: Erstellen eines Geofence

Endlich ist es Zeit, einen Geofence zu erstellen. Wir verwenden den geoFenceMarker als Mittelpunkt für den Geofence.

Als Nächstes erstellen wir das GeofencingRequest-Objekt.

Wir verwenden ein PendingIntent-Objekt, um einen IntentService aufzurufen, der das GeofenceEvent verarbeitet. Wir erstellen die GeofenceTrasitionService.class später.

Wir zeichnen den Geofence auch als visuelle Referenz auf die Karte.

Die Methode startGeofence() ist für das Starten des Geofencing-Prozesses in der MainActivity-Klasse verantwortlich.

Schritt 9: Geofence Transition Service

Wir können jetzt endlich die zuvor erwähnte GeofenceTrasitionService.class erstellen. Diese Klasse erweitert IntentService und ist für die Behandlung des GeofencingEvent verantwortlich. Erstens erhalten wir dieses Ereignis aus der empfangenen Absicht.

Wir prüfen dann, ob die Art des Geofencing-Übergangs für uns von Interesse ist. Wenn dies der Fall ist, rufen wir eine Liste der ausgelösten Geofences ab und erstellen eine Benachrichtigung mit den entsprechenden Aktionen.

Ich habe auch einige Hilfsmethoden implementiert, um die Implementierung der Klasse verständlicher zu machen.

3. Testen

Testen auf einem virtuellen Gerät

Es ist viel einfacher, Geofencing auf einem virtuellen Gerät zu testen. Es gibt verschiedene Möglichkeiten, dies zu tun. Öffnen Sie in Android Studio ein virtuelles Gerät und klicken Sie unten rechts auf die Schaltfläche Weitere Optionen.

Click on More OptionsClick on More OptionsClick on More Options

Geben Sie auf der Registerkarte Standort links die Koordinaten für den Standort ein.

Send Latitude and LongitudeSend Latitude and LongitudeSend Latitude and Longitude

Ich bevorzuge die Verwendung von Telnet-Befehlen zur Steuerung des virtuellen Geräts. Um dies zu verwenden, müssen Sie über die Befehlszeile mit dem folgenden Befehl eine Verbindung zum Gerät herstellen:

Der Geräteport wird im Fenster des virtuellen Geräts angezeigt. Der Geräteport ist normalerweise gleich 5554.

Möglicherweise müssen Sie diese Verbindung mit Ihrem auth_token autorisieren, aber die Befehlszeile zeigt Ihnen, wo sie sich befindet. Navigieren Sie zu diesem Speicherort, kopieren Sie das Token und geben Sie auth [YOUR_AUTH_TOKEN] ein.

Sie können jetzt den Standort des Geräts festlegen, indem Sie den folgenden Befehl ausführen:

Abschluss

Geofencing kann eine großartige Ergänzung Ihrer App sein, da es die Benutzerinteraktion erheblich steigern kann. Es gibt viele Möglichkeiten zu erkunden und Sie können sogar ein anspruchsvolles Erlebnis mit Indoor-Beacons wie dem Estimote schaffen. Mit Indoor-Beacons wissen Sie genau, wo der Benutzer beispielsweise ein Einkaufszentrum betreten hat.

Das Hinzufügen von Geofencing zu einem Projekt ist einfach, aber wir müssen den Stromverbrauch jederzeit im Auge behalten. Dies bedeutet, dass wir die Größe des Geofence und die Aktualisierungsrate sorgfältig auswählen müssen, da sich beide direkt auf den Stromverbrauch Ihrer Anwendung auswirken.

Das Testen ist daher sehr wichtig, um eine realistische Vorstellung vom Stromverbrauch Ihrer Anwendung zu erhalten. Erwägen Sie außerdem, Benutzern die Option zu geben, Geofencing vollständig zu deaktivieren, wenn sie diese Funktion nicht möchten oder benötigen.

Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.