Google Play-Dienste Awareness-API

Eine kontextabhängige Anwendung einer Anwendung ist eine der besten Möglichkeiten, Ihren Benutzern nützliche Dienste anzubieten. Zwar gibt es immer noch mehrere Möglichkeiten, dies zu tun, darunter Geofences, Aktivitätserkennung und andere Standortdienste Awareness-API, So können Entwickler Apps erstellen, die intelligent auf die reale Situation des Benutzers reagieren. Die Awareness-API kombiniert die Places-API, die Orts-API, die Aktivitätserkennung und die API in der Nähe und fügt Unterstützung für die Kopfhörererkennung und die Wettererkennung hinzu.

In diesem Tutorial lernen Sie die Awareness-API und den Zugriff darauf kennen Momentaufnahmen von Daten sowie das Erstellen von Listenern (bekannt als Zäune, ihren Namen von geofences) für Kombinationen von Benutzerbedingungen, die den Zielen Ihrer Anwendungen entsprechen. Dies kann für eine Vielzahl von Apps nützlich sein, z. B. für ortsbezogene Spiele, das Angeben von Gutscheinen für Benutzer in Geschäften und das Starten einer Musik-App, wenn Sie feststellen, dass ein Benutzer trainiert. Den gesamten Code für diese Beispielanwendung finden Sie auf GitHub.

1. Einrichten der Entwicklerkonsole

Bevor Sie in Ihre Android-Anwendung einsteigen, müssen Sie die Google Play-Dienste über die Google API-Konsole einrichten. Wenn Sie bereits ein Projekt erstellt haben, können Sie den ersten Schritt dieses Abschnitts überspringen. Wenn nicht, können Sie auf den obigen Link klicken und ein neues Projekt für Ihre Anwendung erstellen.

Schritt 1: Ein Projekt erstellen

Um ein neues Projekt zu erstellen, klicken Sie auf das blaue Projekt erstellen Schaltfläche oben in der Mitte des Bildschirms. 

Daraufhin wird ein Dialogfeld angezeigt, in dem Sie nach einem Projektnamen gefragt werden. Für dieses Tutorial habe ich ein Projekt mit dem Namen erstellt TutsPlusAwareness. Es gibt einige Einschränkungen hinsichtlich der Namensgebung Ihres Projekts, da nur Buchstaben, Zahlen, Anführungszeichen, Bindestriche, Leerzeichen und Ausrufezeichen Zeichen sind.

Sobald du getroffen hast Erstellen, In der rechten unteren Ecke der Seite wird ein Dialogfeld angezeigt, das darauf hinweist, dass das Projekt erstellt wird. Sobald es verschwunden ist, steht Ihr Projekt zum Einrichten zur Verfügung. Sie sollten einen Bildschirm ähnlich dem folgenden sehen. Wenn nicht, klicken Sie oben links auf das Google APIs-Logo, um zum API-Manager-Bildschirm zu gelangen.

Schritt 2: Aktivieren der erforderlichen API

Von dem Google APIs - Übersicht Wählen Sie das Suchfeld aus und suchen Sie nach der Awareness-API. 

Sobald Sie ausgewählt haben Awareness-API Klicken Sie in den zurückgegebenen Ergebnissen auf das blaue Aktivieren Schaltfläche, damit Ihre App die Awareness-API verwenden kann. Wenn dies die erste aktivierte API ist, werden Sie aufgefordert, eine Reihe von Anmeldeinformationen zu erstellen. Weiter zum Referenzen Seite für Schritt 3 dieses Tutorials.

Neben der Awareness-API gibt es zusätzliche APIs, die Sie möglicherweise aktivieren müssen. Wenn Ihre App die Setzt Funktionalität der Awareness-API müssen Sie aktivieren Google Places-API für Android.

Wenn Ihre App Beacons verwendet, müssen Sie auch das aktivieren Nachrichten-API in der Nähe.

Schritt 3: Erstellen eines Android-API-Schlüssels

Um die aktivierten APIs verwenden zu können, müssen Sie einen API-Schlüssel für Ihre Android-App generieren. Wählen Sie auf der Seite mit den Anmeldeinformationen für Ihr Google-Projekt die Option aus Awareness-API aus dem oberen Dropdown-Menü und Android von der Sekunde.

Als Nächstes werden Sie zu einem Bildschirm weitergeleitet, in dem Sie einen Paketnamen für Ihre App und das SHA1-Zertifikat für den Signaturschlüssel der App eingeben können. Um den Signaturschlüssel für Ihren Debug-Schlüssel unter Linux oder OS X zu erhalten, geben Sie den folgenden Befehl in einem Terminalfenster ein.

keytool -list -v -keystore ~ ​​/ .android / debug.keystore -alias androiddebugkey -storepass android -keypass android

Unter Windows können Sie denselben Befehl ausführen, wobei der Pfad auf den Speicherort Ihres Ordners festgelegt ist debug.keystore Datei.

Sobald Sie auf die Schaltfläche klicken API-Schlüssel erstellen Wenn Sie auf die Schaltfläche klicken, erhalten Sie den API-Schlüssel, den Sie in Ihrer Android-Anwendung verwenden müssen.

2. Einrichten des Android-Projekts

Nachdem Sie einen API-Schlüssel erstellt und die richtigen APIs aktiviert haben, können Sie mit der Einrichtung Ihres Android-Projekts beginnen. Für dieses Lernprogramm erstellen wir eine Testanwendung, um die API kennen zu lernen. 

Um alle Funktionen der Awareness-API zu demonstrieren, konzentriert sich dieses Tutorial auf die Verwendung einer einfachen Liste, die alle verwendeten Funktionen darstellt. Obwohl die Details zum Erstellen dieser Liste nicht besprochen werden, finden Sie eine vollständige Implementierung in der GitHub-Quelle für dieses Lernprogramm.

Schritt 1: Play Services einrichten

Zuerst müssen Sie die Play Services-Bibliothek in Ihre aufnehmen build.gradle Datei. Sie können zwar alle Google Play-Dienste einschließen, es ist jedoch am besten, nur die Pakete aufzunehmen, die Sie für Ihre App benötigen. 

In diesem Fall ist die Awareness-API in verfügbar ContextManager Paket, und es kann in Ihr Projekt aufgenommen werden, indem Sie die folgende Zeile in Ihrem hinzufügen Abhängigkeiten Knoten. Sie möchten auch sicherstellen, dass die AppCompat-Bibliothek ist enthalten, da dies zur Überprüfung der Berechtigungen für Marshmallow und darübere Geräte verwendet wird.

"com.google.android.gms: play-services-contextmanager: 9.2.0" kompilieren "com.android.support:appcompat-v7:23.4.0" kompilieren

Nachdem Sie die obige Zeile hinzugefügt haben, synchronisieren Sie Ihr Projekt und öffnen Sie die strings.xml Datei für Ihr Projekt. Sie möchten Ihren API-Schlüssel aus der Google API Console in einen Zeichenfolgenwert einfügen.

IHR API-SCHLÜSSEL HIER

Nachdem Sie Ihren API-Schlüssel hinzugefügt haben, müssen Sie das Projekt öffnen AndroidManifest.xml Datei. Je nachdem, welche Funktionen der Awareness-API Sie verwenden, müssen Sie Berechtigungen für Ihre App hinzufügen. Wenn Ihre App das Beacon, den Standort, die Orte oder die Wetterfunktionalität der Awareness-API verwendet, müssen Sie die App hinzufügen ACCESS_FINE_LOCATION Genehmigung. Wenn Sie die Aktivitätserkennungsfunktion verwenden müssen, benötigen Sie die ACTIVITY_RECOGNITION Genehmigung.

 

Als nächstes müssen Sie deklarieren Metadaten innerhalb des Anwendung Knoten, der Ihre App mit den Google API-Diensten verknüpft. Je nachdem, was Ihre App verwendet, müssen Sie auch die com.google.android.geo und com.google.android.nearby Metadaten zur Verwendung von Standort, Beacons und Orten.

    

Als nächstes müssen Sie Ihre öffnen MainActivity.java Datei. Ergänzen Sie die GoogleApiClient.OnConnectionFailedListener Schnittstelle zu Ihrer Klasse und verbinden Sie sich mit den Google Play-Diensten und der Awareness-API in Ihrem onCreate (Bundle) Methode.

öffentliche Klasse MainActivity erweitert AppCompatActivity implementiert GoogleApiClient.OnConnectionFailedListener @Override protected void onCreate (Bundle savedInstanceState) super.onCreate (savedInstanceState); setContentView (R.layout.activity_main); mGoogleApiClient = new GoogleApiClient.Builder (this) .addApi (Awareness.API) .enableAutoManage (this, this) .build (); mGoogleApiClient.connect ();  @Override public void onConnectionFailed (@NonNull ConnectionResult connectionResult) 

Schritt 2: Berechtigungen

Jetzt, da Play Services in Ihrer Android-App konfiguriert sind, müssen Sie sicherstellen, dass Ihre Benutzer mit Android Marshmallow oder höher die Berechtigung für Ihre Anwendung zur Verwendung ihres Standorts erteilt haben. Sie können diese Berechtigung in überprüfen onCreate (Bundle) und bevor Sie auf Funktionen zugreifen, für die die Standortberechtigung erforderlich ist, um Abstürze in Ihrer App zu vermeiden.

private boolean checkLocationPermission () if (! hasLocationPermission ()) Log.e ("Tuts +", "Keine Standortberechtigung erteilt"); requestLocationPermission (); falsch zurückgeben;  return true;  private boolean hasLocationPermission () return ContextCompat.checkSelfPermission (this Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED; 

Wenn die Standortberechtigung noch nicht erteilt wurde, können Sie anfordern, dass der Benutzer sie erteilt.

private final static int REQUEST_PERMISSION_RESULT_CODE = 42; private void requestLocationPermission () ActivityCompat.requestPermissions (MainActivity.this, neuer String [] Manifest.permission.ACCESS_FINE_LOCATION, REQUEST_PERMISSION_RESULT_CODE); 

Daraufhin wird ein Systemdialogfeld angezeigt, in dem der Benutzer gefragt wird, ob er Ihrer App die Erlaubnis erteilen möchte, den Standort anzugeben. 

Wenn der Benutzer geantwortet hat, die onRequestPermissionsResult () Callback empfängt die Ergebnisse und Ihre App kann entsprechend reagieren.

@Override public void onRequestPermissionsResult (int requestCode, @NonNull String-Berechtigungen [], @NonNull int [] grantResults) switch (requestCode) case REQUEST_PERMISSION_RESULT_CODE: // Wenn die Anfrage abgebrochen wird, sind die Ergebnisarrays leer. if (grantResults.length> 0 && grantResults [0] == PackageManager.PERMISSION_GRANTED) // grant else Log.e ("Tuts +", "Standortberechtigung verweigert.");  

An diesem Punkt sollten Sie mit der Einrichtung Ihrer Anwendung für die Verwendung der Awareness-API fertig sein.

3. Verwenden der Snapshot-API

Wenn Sie Informationen zum aktuellen Kontext eines Benutzers sammeln möchten, können Sie die Snapshot-Funktion der Awareness-API verwenden. Diese API sammelt je nach Art des API-Aufrufs Informationen und speichert diese Informationen für den schnellen Zugriff über verschiedene Apps.

Kopfhörer

Eine der neuen Ergänzungen zu Play Services über die Awareness-API ist die Möglichkeit, den Kopfhörerstatus eines Geräts (angeschlossen oder nicht angeschlossen) zu erkennen. Dies kann durch Aufrufen erfolgen getHeadphoneState () auf der Awareness API und Lesen der Kopfhörerstatus von dem HeadphoneStateResult.

private void detectHeadphones () Awareness.SnapshotApi.getHeadphoneState (mGoogleApiClient) .setResultCallback (neues ResultCallback)() @Override public void onResult (@NonNull HeadphoneStateResult headphoneStateResult) HeadphoneState headphoneState = headphoneStateResult.getHeadphoneState (); if (headphoneState.getState () == HeadphoneState.PLUGGED_IN) Log.e ("Tuts +", "Kopfhörer sind angeschlossen.");  else Log.e ("Tuts +", "Kopfhörer sind NICHT angeschlossen."); ); 

Sobald Sie den Status des Kopfhörers kennen, kann Ihre App basierend auf diesen Informationen alle erforderlichen Aktionen ausführen.

Ort

Obwohl zuvor als Komponente in den Google Play-Services verfügbar, wurde die Standortfunktion der Awareness-API für Effizienz und Akkubetrieb optimiert. Anstatt die herkömmliche Standort-API zu verwenden und in bestimmten Intervallen einen Standort zu empfangen, können Sie einen einmaligen Standort-Snapshot anfordern.

private void detectLocation () if (! checkLocationPermission ()) return;  Awareness.SnapshotApi.getLocation (mGoogleApiClient) .setResultCallback (neuer ResultCallback)() @Override public void onResult (@NonNull LocationResult locationResult) Standort location = locationResult.getLocation (); Log.e ("Tuts +", "Latitude:" + location.getLatitude () + ", Longitude:" + location.getLongitude ()); Log.e ("Tuts +", "Provider:" + location.getProvider () + "time:" + location.getTime ()); if (location.hasAccuracy ()) Log.e ("Tuts +", "Accuracy:" + location.getAccuracy ());  if (location.hasAltitude ()) Log.e ("Tuts +", "Altitude:" + location.getAltitude ());  if (location.hasBearing ()) Log.e ("Tuts +", "Bearing:" + location.getBearing ());  if (location.hasSpeed ​​()) Log.e ("Tuts +", "Speed:" + location.getSpeed ​​()); ); 

Wie Sie sehen, müssen Sie zunächst überprüfen, ob der Benutzer die Standortberechtigung erteilt hat. Wenn dies der Fall ist, können Sie ein Standardobjekt Location mit vielen Daten zum Standort und zur Geschwindigkeit des Benutzers sowie Informationen zur Genauigkeit dieser Daten abrufen. 

Sie sollten vor der Verwendung überprüfen, ob eine bestimmte Information vorhanden ist, da einige Daten möglicherweise nicht verfügbar sind. Beim Ausführen dieses Codes sollten alle verfügbaren Daten im Android-Systemprotokoll ausgegeben werden.

E / Tuts +: Breitengrad: 39,9255456, Längengrad: -105.02939579999999 E / Tuts +: Anbieter: Schnappschusszeit: 1468696704662 E / Tuts +: Genauigkeit: 20.0 E / Tuts +: Höhe: 0.0 E / Tuts +: Geschwindigkeit: 0.0

Setzt

Die Awareness-API ist zwar nicht so robust wie die Standard-Places-API, bietet jedoch eine schnelle und einfach anzuwendende Methode zum Sammeln von Informationen zu Orten in der Nähe des Benutzers. Dieser API-Aufruf gibt a zurück Liste von PlaceLikelihood Objekte, die eine Platz und ein schweben Darstellen, wie wahrscheinlich es ist, dass sich ein Benutzer an diesem Ort befindet (daher der Name des Objekts). 

Jeder Platz Das Objekt kann einen Namen, eine Adresse, eine Telefonnummer, einen Ortstyp, eine Benutzerbewertung und andere nützliche Informationen enthalten. Sie können die nahegelegenen Orte für den Benutzer anfordern, nachdem Sie überprüft haben, dass der Benutzer über die Standortberechtigung verfügt.

private void detectNearbyPlaces () if (! checkLocationPermission ()) return;  Awareness.SnapshotApi.getPlaces (mGoogleApiClient) .setResultCallback (neues ResultCallback)() @Override public void onResult (@NonNull PlacesResult placesResult) Ort platzieren; für (placeLikelihood placeLikelihood: placesResult.getPlaceLikelihoods ()) place = placeLikelihood.getPlace (); Log.e ("Tuts +", place.getName (). ToString () + "\ n" + place.getAddress (). ToString ()); Log.e ("Tuts +", "Rating:" + place.getRating ()); Log.e ("Tuts +", "Wahrscheinlichkeit, dass der Benutzer hier ist:" + placeLikelihood.getLikelihood () * 100 + "%")); ); 

Wenn Sie die obige Methode ausführen, sollte in der Android-Konsole eine Ausgabe ähnlich der folgenden angezeigt werden. Wenn für eine Zahl kein Wert verfügbar ist, -1 Wird zurückgegeben.

E / Tuts +: North Side Tavern 12708 Lowell Boulevard, Broomfield, CO 80020, USA E / Tuts +: Bewertung: 4.7 E / Tuts +: Die Wahrscheinlichkeit, dass der Benutzer hier ist: 10,0% E / Tuts +: Quilt Store 12710 Lowell Blvd, Broomfield, CO 80020, USA E / Tuts +: Bewertung: 4.3 E / Tuts +: Wahrscheinlichkeit, dass der Benutzer hier ist: 10,0% E / Tuts +: Absolute Bodenpflege 3508 B 126th Pl, Broomfield, CO 80020, USA E / Tuts +: Bewertung: -1,0

Wetter

Eine weitere Neuerung der Google Play-Dienste über die Awareness-API ist die Möglichkeit, die Wetterbedingungen für einen Nutzer zu ermitteln. Diese Funktion erfordert außerdem die Standortberechtigung für Benutzer in Marshmallow und höher. 

Mit dieser Anfrage können Sie die Temperatur im Benutzerbereich in Fahrenheit oder Celsius ermitteln. Sie können auch herausfinden, wie sich die Temperatur anfühlt, den Taupunkt (die Temperatur, bei der Wasser in der Luft beginnen kann, sich zu Tau zu kondensieren), den Feuchtigkeitsgehalt und die Wetterbedingungen.

private void detectWeather () if (! checkLocationPermission ()) return;  Awareness.SnapshotApi.getWeather (mGoogleApiClient) .setResultCallback (neues ResultCallback)() @Override public void onResult (@NonNull WeatherResult weatherResult) Wetter weather = weatherResult.getWeather (); Log.e ("Tuts +", "Temp:" + weather.getTemperature (Weather.FAHRENHEIT)); Log.e ("Tuts +", "fühlt sich an wie:" + weather.getFeelsLikeTemperature (Weather.FAHRENHEIT)); Log.e ("Tuts +", "Taupunkt:" + weather.getDewPoint (Weather.FAHRENHEIT)); Log.e ("Tuts +", "Humidity:" + weather.getHumidity ()); if (weather.getConditions () [0] == Weather.CONDITION_CLOUDY) Log.e ("Tuts +", "Sieht aus, als wären da draußen einige Wolken"); ); 

Der obige Code sollte etwas ähnliches ausgeben.

E / Tuts +: Temp: 88.0 E / Tuts +: Gefühlt sich an wie: 88.0 E / Tuts +: Taupunkt: 50.0 E / Tuts +: Luftfeuchtigkeit: 28 E / Tuts +: Sieht aus, als wären da draußen einige Wolken

Hierbei ist zu beachten, dass der Wetterwert als int. Die gesamte Liste der Bedingungswerte finden Sie im Weather-Objekt.

int CONDITION_UNKNOWN = 0; int CONDITION_CLEAR = 1; int CONDITION_CLOUDY = 2; int CONDITION_FOGGY = 3; int CONDITION_HAZY = 4; int CONDITION_ICY = 5; int CONDITION_RAINY = 6; int CONDITION_SNOWY = 7; int CONDITION_STORMY = 8; int CONDITION_WINDY = 9;

Aktivität

Die Aktivität Ihrer Benutzer wird einen großen Einfluss auf die Interaktion mit ihrem Gerät haben. Wenn Sie diese Aktivität erkennen, können Sie die Benutzeroberfläche flüssiger gestalten. 

Wenn Sie beispielsweise über eine Fitness-App verfügen, möchten Sie möglicherweise erkennen, wann ein Nutzer aktiv ist, um eine Google Fit-Sitzung aufzuzeichnen, oder Sie möchten eine Benachrichtigung an Ihren Nutzer senden, wenn Sie feststellen, dass er noch nicht benutzt wurde zu viele stunden am tag. 

Verwendung der getDetectedActivity () Wenn Sie in der Awareness-API aufrufen, erhalten Sie eine Liste der wahrscheinlichen Aktivitäten und wie lange der Benutzer diese jeweils ausgeführt hat.

private void detectActivity () Awareness.SnapshotApi.getDetectedActivity (mGoogleApiClient) .setResultCallback (neues ResultCallback)() @Override public void onResult (@NonNull DetectedActivityResult erkanntActivityResult) ActivityRecognitionResult Ergebnis = detectedActivityResult.getActivityRecognitionResult (); Log.e ("Tuts +", "time:" + result.getTime ()); Log.e ("Tuts +", "verstrichene Zeit:" + result.getElapsedRealtimeMillis ()); Log.e ("Tuts +", "Wahrscheinlichste Aktivität:") + result.getMostProbableActivity (). ToString ()); for (ErkannteAktivitätsaktivität: result.getProbableActivities ()) Log.e ("Tuts +", "Activity:" + activity.getType () + "Likelihood:" + activity.getConfidence ()); ); 

Die obige Methode zeigt die wahrscheinlichste Aktivität für den Benutzer, wie lange er sich in diesem Zustand befunden hat, und die Liste aller möglichen Aktivitäten an.

E / Tuts +: Zeit: 1468701845962 E / Tuts +: verstrichene Zeit: 15693985 E / Tuts +: Am wahrscheinlichsten Aktivität: ErkannteAktivität [Typ = STILL, Konfidenz = 100] E / Tuts +: Aktivität: 3 Wahrscheinlichkeit: 100

Das ErkannteAktivität Typwerte können den folgenden Werten zugeordnet werden:

int IN_VEHICLE = 0; int ON_BICYCLE = 1; int ON_FOOT = 2; int STILL = 3; int UNKNOWN = 4; int TILTING = 5; int WALKING = 7; int RUNNING = 8;

Baken

Die letzte Art der Momentaufnahme, die am schwierigsten einzurichten ist, weil sie eine reale Komponente erfordert, ist BLE (Bluetooth Low Energy) Baken. Die API für nahegelegene Anwendungen liegt nicht in diesem Tutorial. Sie können jedoch Beacons für Ihr eigenes Google Services-Projekt mithilfe der Beacon Tools-App von Google initialisieren.

Es ist wichtig zu wissen, dass Sie einen Beacon für ein Google-API-Projekt registriert haben, Sie können die Registrierung nicht rückgängig machen, ohne die Beacon-ID zurückzusetzen. Das bedeutet, wenn Sie dieses Projekt löschen, muss der Beacon mithilfe der Hersteller-App neu konfiguriert werden. Für die Awareness-API muss der Namespace mit dem Google-Projekt übereinstimmen, das Sie für Ihre Awareness-API-Aufrufe verwenden. Der obige Beacon wurde bereits für ein persönliches Google-Testprojekt registriert, daher der unterschiedliche Namensraum (reflektierte Scheibe-355) aus dem Beispielprojekt dieses Tutorials.

Im obigen Screenshot sehen Sie einen Punkt unter Anlagen. Der Namespace für diesen Anhang lautet reflektierte Scheibe-355 (Der Namespace des Beispielprojekts dieses Tutorials lautet tutsplusawareness) Und der Typ ist in der Nähe. Sie benötigen diese Informationen für Ihre eigenen Beacons, um Anhänge mit der Awareness-API erkennen zu können.

Wenn Sie Beacons konfiguriert haben, können Sie zu Ihrem Code zurückkehren. Sie müssen ein erstellen Liste von BeaconState.TypeFilter Objekte, damit Ihre App Beacons und Anhänge herausfiltern kann, die sich nicht auf Ihre Anwendung beziehen. 

private static final List BEACON_TYPE_FILTERS = Arrays.asList (BeaconState.TypeFilter.with (// ersetzt diese durch die Werte Ihres Beacons "Namespace", "type"));

Wenn Sie Grund zu der Annahme haben, dass sich Ihr Benutzer in der Nähe eines Beacons befindet, können Sie Anhänge von Beacons anfordern, die den oben genannten Filteranforderungen entsprechen. Dies erfordert die Standortberechtigung für Benutzer in Marshmallow und höher.

private void detectBeacons () if (! checkLocationPermission ()) return;  Awareness.SnapshotApi.getBeaconState (mGoogleApiClient, BEACON_TYPE_FILTERS) .setResultCallback (neuer ResultCallback() @Override public void onResult (@NonNull BeaconStateResult beaconStateResult) if (! BeaconStateResult.getStatus (). IsSuccess ()) Log.e ("Test", "Konnte den Beacon-Status nicht erhalten."); Rückkehr;  BeaconState beaconState = beaconStateResult.getBeaconState (); if (beaconState == null) Log.e ("Tuts +", "Beacon-Status ist Null");  else for (BeaconState.BeaconInfo info: beaconState.getBeaconInfo ()) Log.e ("Tuts +", neuer String (info.getContent ())); ); 

Mit diesem Code werden Informationen zu der Anlage abgehängt, die dem obigen Beispiel-Beacon zugeordnet ist. In diesem Beispiel habe ich zwei Beacons mit demselben Namespace und Typ konfiguriert, um zu zeigen, dass mehrere Beacons gleichzeitig erkannt werden können.

E / Tuts +: Oh Hi Tuts + E / Tuts +: Portable Beacon-Informationen

4. Verwenden der Fences-API

Während die Snapshot-API zu einem bestimmten Zeitpunkt Informationen über den Kontext des Benutzers abrufen kann, wartet die Fences-API auf bestimmte Bedingungen, die erfüllt werden müssen, bevor eine Aktion ausgeführt werden kann. Die Fences-API wurde für eine effiziente Batterie- und Datennutzung optimiert, um den Benutzern einen hohen Standard zu bieten. 

Es gibt fünf Arten von Bedingungen, die Sie beim Erstellen von Zäunen prüfen können:

  • Gerätebedingungen, z. B. wenn der Benutzer den Kopfhörer nicht angeschlossen oder nicht angeschlossen hat
  • Standort, ähnlich einem Standard-Geofence
  • das Vorhandensein bestimmter BLE-Baken
  • Benutzeraktivität wie Laufen oder Fahren
  • Zeit

Derzeit haben Wetterbedingungen und Orte keine Unterstützung für Zäune. Sie können einen Zaun erstellen, der eine der unterstützten Funktionen verwendet. Eine wirklich nützliche Funktion dieser API ist jedoch, dass logische Operationen auf Bedingungen angewendet werden können. Sie können mehrere Zäune nehmen und verwenden und, oder, und nicht Operationen, um die Bedingungen zu kombinieren, um die Anforderungen Ihrer App zu erfüllen. 

Ein ... kreieren Rundfunkempfänger

Bevor Sie Ihren Zaun erstellen, benötigen Sie einen Schlüsselwert, der jeden Zaun darstellt, auf den Ihre App wartet. Zum Abschluss dieses Tutorials erstellen Sie einen Zaun, der erkennt, wenn sich ein Benutzer an einem bestimmten Ort befindet, z. B. zu Hause.

private final static Zeichenfolge KEY_SITTING_AT_HOME = "sitting_at_home";

Sobald Sie einen Schlüssel definiert haben, können Sie eine Sendung abhören Absicht das enthält diesen Schlüssel.

public class FenceBroadcastReceiver erweitert BroadcastReceiver @Override public void onReceive (Kontext-Kontext, Absichtsabsicht) if (TextUtils.equals (ACTION_FENCE, intent.getAction ())) FenceState fenceState = FenceState.extract (intent); if (TextUtils.equals (KEY_SITTING_AT_HOME, fenceState.getFenceKey ())) if (fenceState.getCurrentState () == FenceState.TRUE) Log.e ("Tuts +", "Sie haben zu lange zu Hause gesessen" ); 

Zäune erstellen

Nachdem Sie nun einen Empfänger zum Abhören von Benutzerereignissen erstellt haben, ist es an der Zeit, Ihre Zäune zu erstellen. Der Erste AwarenessFence Sie erstellen, wird auf hören, wenn sich der Benutzer in einer IMMER NOCH Zustand.

AwarenessFence activityFence = DetectedActivityFence.during (DetectedActivityFence.STILL);

Der zweite Zaun, den Sie erstellen, wartet, bis sich der Benutzer in Reichweite eines bestimmten Ortes befindet. Während für dieses Beispiel bereits Werte für Breitengrad und Längengrad festgelegt sind, sollten Sie diese ändern, um die Koordinaten zu bestimmen, die Ihrem Standort zum Testen entsprechen.

AwarenessFence homeFence = LocationFence.in (39.92, -105.7, 100000, 1000);

Da Sie nun zwei Zäune haben, können Sie sie zu einem dritten zusammenfügen AwarenessFence mit der AwarenessFence.and Operation.

AwarenessFence sittingAtHomeFence = AwarenessFence.and (homeFence, activityFence);

Schließlich können Sie ein erstellen PendingIntent das wird zu Ihrem gesendet Rundfunkempfänger und fügen Sie es der Awareness-API mit der updateFences Methode.

Vorsatz = neuer Vorsatz (ACTION_FENCE); PendingIntent fencePendingIntent = PendingIntent.getBroadcast (this, 0, intent, 0); mFenceBroadcastReceiver = neuer FenceBroadcastReceiver (); registerReceiver (mFenceBroadcastReceiver, neuer IntentFilter (ACTION_FENCE)); FenceUpdateRequest.Builder builder = new FenceUpdateRequest.Builder (); builder.addFence (KEY_SITTING_AT_HOME, sittingAtHomeFence, fencePendingIntent); Awareness.FenceApi.updateFences (mGoogleApiClient, builder.build ());

Jetzt protokolliert die App eine Nachricht, wenn sich der Benutzer im Bereich des angegebenen Speicherorts befindet.

Fazit

In diesem Lernprogramm haben Sie die Awareness-API kennen gelernt und erfahren, wie Sie aktuelle Informationen über die Benutzerumgebung sammeln. Sie haben auch gelernt, einen Listener für Änderungen im Benutzerkontext zu registrieren und zu handeln, wenn bestimmte Bedingungen erfüllt sind. 

Mit diesen Informationen sollten Sie in der Lage sein, Ihre eigenen Apps zu erweitern und den Benutzern anhand ihres aktuellen Standorts, ihrer Aktivität und anderer nützlicher Werte erstaunlichere Erfahrungen zu bieten.