Een applicatie contextbewust maken is een van de beste manieren om gebruikers nuttige diensten aan te bieden. Hoewel er nog steeds meerdere manieren zijn om dit te doen, inclusief geofences, activiteitsherkenning en andere locatieservices, heeft Google onlangs de Awareness API, waarmee ontwikkelaars apps kunnen maken die op intelligente wijze reageren op de werkelijke situatie van de gebruiker. De Awareness API combineert de Places API, Locations API, Activity Recognition en Nearby API en voegt ook ondersteuning toe voor de hoofdtelefoonstatus en weersdetectie.
In deze tutorial leert u over de Awareness API en hoe u toegang krijgt snapshots van gegevens, evenals hoe luisteraars te creëren (bekend als hekken, hun naam ontleend aan geofences) voor combinaties van gebruikersvoorwaarden die overeenkomen met de doelen van uw applicaties. Dit kan handig zijn voor een breed scala aan apps, zoals op locatie gebaseerde games, kortingsbonnen voor gebruikers in winkels en het starten van een muziek-app wanneer u een gebruiker ontdekt die traint. Alle code voor deze voorbeeldtoepassing is te vinden op GitHub.
Voordat u in uw Android-app duikt, moet u Google Play-services instellen via de Google API-console. Als u al een project hebt gemaakt, kunt u de eerste stap van dit gedeelte overslaan. Als dat niet het geval is, kunt u op de bovenstaande link klikken en doorgaan om een nieuw project voor uw toepassing te maken.
Om een nieuw project aan te maken, klikt u op het blauwe Maak een project knop in het midden bovenaan het scherm.
Dit presenteert u een dialoog die om een projectnaam vraagt. Voor deze zelfstudie heb ik een project gemaakt met de naam TutsPlusAwareness. Er zijn enkele beperkingen aan wat u uw project kunt noemen, omdat alleen letters, cijfers, aanhalingstekens, koppeltekens, spaties en uitroeptekens tekens zijn toegestaan.
Zodra je geraakt bent creëren, een dialoogvenster verschijnt in de rechter benedenhoek van de pagina om aan te geven dat het project wordt aangemaakt. Zodra het is verdwenen, is uw project beschikbaar voor het opzetten. U zou een scherm moeten zien dat lijkt op het volgende. Als dat niet het geval is, klikt u op het logo van Google API's in de linkerbovenhoek om naar het scherm API-beheer te gaan.
Van de Overzicht van Google API's scherm, selecteer het zoekvak en zoek naar de Awareness API.
Als je eenmaal hebt geselecteerd Awareness API uit de geretourneerde resultaten, klik op de blauwe in staat stellen om uw app in staat te stellen de Awareness API te gebruiken. Als dit de eerste API is die u hebt ingeschakeld, wordt u gevraagd een reeks referenties te maken. Ga verder naar de Geloofsbrieven pagina voor stap 3 van deze tutorial.
Naast de Awareness API zijn er aanvullende API's die u mogelijk moet inschakelen. Als uw app de plaatsen functionaliteit van de Awareness API, moet u inschakelen Google Places API voor Android.
Als uw app bakens gebruikt, moet u ook de API voor berichten in de buurt.
Als u de ingeschakelde API's wilt gebruiken, moet u een API-sleutel genereren voor uw Android-app. Selecteer op de pagina Inloggegevens voor uw Google-project Awareness API in het bovenste vervolgkeuzemenu en Android vanaf het tweede.
Vervolgens wordt u naar een scherm gebracht waar u een pakketnaam voor uw app en het SHA1-certificaat voor de handtekeningsleutel van de app kunt invoeren. Om de ondertekeningssleutel voor je foutopsporingssleutel op Linux of OS X te krijgen, voer je de volgende opdracht in een terminalvenster in.
keytool -list -v -keystore ~ / .android / debug.keystore -alias androiddebugkey -storepass android -keypass android
In Windows kunt u dezelfde opdracht uitvoeren met het pad ingesteld op de locatie van uw debug.keystore het dossier.
Als u eenmaal op de Maak een API-sleutel knop, krijgt u de API-sleutel die u nodig hebt om te gebruiken in uw Android-applicatie.
Nadat u een API-sleutel hebt gemaakt en de juiste API's hebt ingeschakeld, is het tijd om uw Android-project te starten. Voor deze zelfstudie maken we een testtoepassing om de API te leren.
Om alle functies van de Awareness API te demonstreren, zal deze tutorial zich concentreren op het gebruik van een eenvoudige lijst die elke gebruikte functie weergeeft. Hoewel de details voor het maken van deze lijst niet worden besproken, kunt u een volledige implementatie vinden in de GitHub-bron voor deze zelfstudie.
Eerst moet u de Play Services-bibliotheek opnemen in uw build.gradle het dossier. Hoewel u alle Google Play-services kunt opnemen, kunt u het beste alleen de pakketten opnemen die u nodig heeft voor uw app.
In dit geval is de Awareness API beschikbaar in de ContextManager pakket, en het kan in uw project worden opgenomen door de volgende regel toe te voegen aan uw afhankelijkheden knooppunt. Je wilt ook zeker zijn van de AppCompat-bibliotheek is opgenomen, omdat dit wordt gebruikt voor het controleren van machtigingen op Marshmallow- en hoger apparaten.
compileren 'com.google.android.gms: play-services-contextmanager: 9.2.0' compileer 'com.android.support:appcompat-v7:23.4.0'
Nadat u de bovenstaande regel hebt toegevoegd, synchroniseert u uw project en opent u het strings.xml bestand voor uw project. U wilt uw API-sleutel vanuit de Google API Console in een tekenreekswaarde plaatsen.
UW API SLEUTEL HIER
Nadat u uw API-sleutel hebt toegevoegd, moet u uw project openen AndroidManifest.xml het dossier. Afhankelijk van de functies van de Awareness-API die u gebruikt, moet u rechten voor uw app opnemen. Als uw app de baken, locatie, plaatsen of weerfunctionaliteit van de Awareness API gebruikt, moet u de ACCESS_FINE_LOCATION
toestemming. Als u de activiteitherkenningsfunctionaliteit moet gebruiken, hebt u de ACTIVITY_RECOGNITION
toestemming.
Vervolgens moet je aangeven meta-data
binnen de toepassing
knooppunt dat uw app aan de Google API-services koppelt. Afhankelijk van wat uw app gebruikt, moet u ook het com.google.android.geo
en com.google.android.nearby
metadata voor het gebruik van locaties, bakens en plaatsen.
Vervolgens moet je je. Openen MainActivity.java het dossier. Voeg de toe GoogleApiClient.OnConnectionFailedListener
interface naar uw klas en maak verbinding met Google Play-services en de Awareness API in uw onCreate (bundel)
methode.
public class MainActivity breidt AppCompatActivity implementeert GoogleApiClient.OnConnectionFailedListener @Override protected void onCreate (Bundle savedInstanceState) super.onCreate (savedInstanceState); setContentView (R.layout.activity_main); mGoogleApiClient = nieuwe GoogleApiClient.Builder (dit) .addApi (Awareness.API) .enableAutoManage (this, this) .build (); mGoogleApiClient.connect (); @Override public void onConnectionFailed (@NonNull ConnectionResult connectionResult)
Nu Play-services zijn geconfigureerd in uw Android-app, moet u ervoor zorgen dat uw gebruikers op Android Marshmallow of hoger toestemming hebben gegeven voor uw aanvraag om hun locatie te gebruiken. U kunt deze toestemming controleren in onCreate (bundel)
en voordat u toegang krijgt tot functies waarvoor de locatietoestemming vereist is om crashes in uw app te voorkomen.
private boolean checkLocationPermission () if (! hasLocationPermission ()) Log.e ("Tuts +", "Er is geen locatietoestemming verleend"); requestLocationPermission (); return false; return true; private boolean hasLocationPermission () return ContextCompat.checkSelfPermission (this, Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED;
Als de locatietoestemming nog niet is verleend, kunt u de gebruiker om toestemming vragen.
privé definitieve statische int REQUEST_PERMISSION_RESULT_CODE = 42; private void requestLocationPermission () ActivityCompat.requestPermissions (MainActivity.this, new String [] Manifest.permission.ACCESS_FINE_LOCATION, REQUEST_PERMISSION_RESULT_CODE);
Hierdoor verschijnt er een systeemdialoog waarin de gebruiker wordt gevraagd of hij toestemming wil geven aan uw app om hun locatie te weten.
Wanneer de gebruiker heeft gereageerd, de onRequestPermissionsResult ()
callback ontvangt de resultaten en uw app kan dienovereenkomstig reageren.
@Override public void onRequestPermissionsResult (int requestCode, @NonNull String-machtigingen [], @NonNull int [] grantResults) switch (requestCode) case REQUEST_PERMISSION_RESULT_CODE: // Als het verzoek wordt geannuleerd, zijn de resultaatarrays leeg. if (grantResults.length> 0 && grantResults [0] == PackageManager.PERMISSION_GRANTED) // granted else Log.e ("Tuts +", "Location permission denied.");
Op dit punt zou u klaar moeten zijn met het instellen van uw toepassing voor gebruik van de Awareness API.
Wanneer u informatie over de huidige context van een gebruiker wilt verzamelen, kunt u de snapshot-functionaliteit van de Awareness API gebruiken. Deze API verzamelt informatie afhankelijk van het type API-aanroep dat wordt gedaan en slaat deze informatie in het cachegeheugen op voor snelle toegang over verschillende apps.
Een van de nieuwe toevoegingen aan Play Services via de Awareness API is de mogelijkheid om de koptelefoonstatus van een apparaat te detecteren (aangesloten of losgekoppeld). Dit kan gedaan worden door te bellen getHeadphoneState ()
op de Awareness API en het lezen van de HeadphoneState
van de HeadphoneStateResult
.
private void detectHeadphones () Awareness.SnapshotApi.getHeadphoneState (mGoogleApiClient) .setResultCallback (new ResultCallback() @Override public unfid onResult (@NonNull HeadphoneStateResult headphoneStateResult) HeadphoneState headphoneState = headphoneStateResult.getHeadphoneState (); if (headphoneState.getState () == HeadphoneState.PLUGGED_IN) Log.e ("Tuts +", "Headphones are plugd in."); else Log.e ("Tuts +", "Koptelefoons zijn NIET aangesloten."); );
Zodra u de staat van de hoofdtelefoon kent, kan uw app de acties uitvoeren die nodig zijn op basis van die informatie.
Hoewel voorheen beschikbaar als onderdeel in Google Play Services, is de locatiefunctie van de Awareness API geoptimaliseerd voor efficiëntie en batterijgebruik. In plaats van de traditionele locatie-API te gebruiken en een locatie met bepaalde intervallen te ontvangen, kunt u een eenmalige momentopname van een locatie aanvragen, zoals zo.
private void detectLocation () if (! checkLocationPermission ()) return; Awareness.SnapshotApi.getLocation (mGoogleApiClient) .setResultCallback (new ResultCallback() @Override public unfid onResult (@NonNull LocationResult locationResult) Locatie locatie = 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 ()); );
Zoals u kunt zien, moet u eerst controleren of de gebruiker de locatietoestemming heeft verleend. Als dat het geval is, kunt u een standaardlocatieobject ophalen met een grote hoeveelheid gegevens over de locatie en snelheid van de gebruiker, evenals informatie over de juistheid van deze gegevens.
U zult willen verifiëren dat een specifiek stuk informatie bestaat voordat u het gebruikt, omdat sommige gegevens mogelijk niet beschikbaar zijn. Het uitvoeren van deze code moet alle beschikbare gegevens uitvoeren naar het Android-systeemlogboek.
E / Tuts +: Latitude: 39.9255456, Longitude: -105.02939579999999 E / Tuts +: Aanbieder: moment van momentopname: 1468696704662 E / Tuts +: nauwkeurigheid: 20.0 E / Tuts +: hoogte: 0.0 E / Tuts +: snelheid: 0.0
Hoewel het niet zo robuust is als de standaard Places API, biedt de Awareness API een snelle en gemakkelijk te gebruiken manier om informatie te verzamelen over plaatsen in de buurt van de gebruiker. Deze API-oproep retourneert a Lijst
van PlaceLikelihood
objecten die een bevatten Plaats
en een vlotter
weergeven hoe waarschijnlijk het is dat een gebruiker op die plaats is (vandaar de naam van het object).
Elk Plaats
object kan een naam, adres, telefoonnummer, plaatstype, gebruikersclassificatie en andere nuttige informatie bevatten. U kunt de plaatsen in de omgeving voor de gebruiker opvragen nadat u hebt gecontroleerd of de gebruiker de locatietoestemming heeft verleend.
private void detectNearbyPlaces () if (! checkLocationPermission ()) return; Awareness.SnapshotApi.getPlaces (m GoogleApiClient) .setResultCallback (new ResultCallback() @Overige openbare ongeldig maken inResult (@NonNull PlacesResult placesResult) Place place; for (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 +", "Waarschijnlijkheid dat de gebruiker hier is:" + placeLikelihood.getLikelihood () * 100 + "%"); );
Wanneer u de bovenstaande methode uitvoert, ziet u uitvoer zoals in de Android-console. Als een waarde niet beschikbaar is voor een nummer, -1
zal worden teruggegeven.
E / Tuts +: North Side Tavern 12708 Lowell Blvd, Broomfield, CO 80020, VS E / Tuts +: Score: 4.7 E / Tuts +: Waarschijnlijkheid dat de gebruiker de situatie hier is: 10.0% E / Tuts +: Quilt Store 12710 Lowell Blvd, Broomfield, CO 80020, VS E / Tuts +: Score: 4.3 E / Tuts +: Waarschijnlijkheid dat de gebruiker er is: 10.0% E / Tuts +: Absolute Floor Care 3508 W 126th Pl, Broomfield, CO 80020, VS E / Tuts +: Beoordeling: -1.0
Een van de nieuwe toevoegingen aan Google Play-services via de Awareness API is de mogelijkheid om de weersomstandigheden voor een gebruiker te krijgen. Voor deze functie is ook de locatietoestemming vereist voor gebruikers op Marshmallow en later.
Met dit verzoek kunt u de temperatuur in het gebied van de gebruiker in Fahrenheit of Celsius krijgen. Je kunt ook ontdekken hoe de temperatuur aanvoelt, het dauwpunt (de temperatuur waarbij het water in de lucht kan beginnen te condenseren tot dauw), het vochtigheidspercentage en de weersomstandigheden..
private void detectWeather () if (! checkLocationPermission ()) return; Awareness.SnapshotApi.getWeather (m GoogleApiClient) .setResultCallback (new ResultCallback() @Override public void onResult (@NonNull WeatherResult weatherResult) Weer bij weer = weatherResult.getWeather (); Log.e ("Tuts +", "Temp:" + weather.getTemperature (Weather.FAHRENHEIT)); Log.e ("Tuts +", "Voelt als:" + weather.getFeelsLikeTemperature (Weather.FAHRENHEIT)); Log.e ("Tuts +", "Dauwpunt:" + weather.getDewPoint (Weather.FAHRENHEIT)); Log.e ("Tuts +", "Vochtigheid:" + weather.getHumidity ()); if (weather.getConditions () [0] == Weather.CONDITION_CLOUDY) Log.e ("Tuts +", "Het lijkt erop dat er wat wolken zijn"); );
De bovenstaande code zou iets vergelijkbaars moeten uitvoeren.
E / Tuts +: Temp: 88.0 E / Tuts +: Voelt als: 88.0 E / Tuts +: Dauwpunt: 50.0 E / Tuts +: Vochtigheid: 28 E / Tuts +: Het lijkt erop dat er wat wolken zijn
Een belangrijk ding om op te merken is dat de waarde van de weersomstandigheden wordt opgeslagen als een int
. De volledige lijst met conditiewaarden is te vinden in het object Weer.
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;
De activiteit van uw gebruiker zal een grote rol spelen in de manier waarop zij omgaan met hun apparaat, en door te detecteren dat deze activiteit u in staat stelt een vloeiendere gebruikerservaring te bieden.
Als u bijvoorbeeld een fitness-app heeft, wilt u misschien detecteren wanneer een gebruiker actief is, zodat u een Google Fit-sessie kunt opnemen, of wilt u misschien een melding naar uw gebruiker sturen als u merkt dat ze nog steeds voor te veel uren overdag.
De ... gebruiken getDetectedActivity ()
oproep in de Awareness API, u kunt een lijst krijgen met waarschijnlijke activiteiten en hoe lang de gebruiker al deze heeft gedaan.
private void detectActivity () Awareness.SnapshotApi.getDetectedActivity (mGoogleApiClient) .setResultCallback (new ResultCallback() @Override public unfid onResult (@NonNull DetectedActivityResult detectedActivityResult) ActivityRecognitionResult result = detectedActivityResult.getActivityRecognitionResult (); Log.e ("Tuts +", "time:" + result.getTime ()); Log.e ("Tuts +", "verstreken tijd:" + result.getElapsedRealtimeMillis ()); Log.e ("Tuts +", "Meest waarschijnlijke activiteit:" + result.getMostProbableActivity (). ToString ()); for (DetectedActivity-activiteit: result.getProbableActivities ()) Log.e ("Tuts +", "Activity:" + activity.getType () + "Waarschijnlijkheid:" + activity.getConfidence ()); );
De bovenstaande methode toont de meest waarschijnlijke activiteit voor de gebruiker, hoe lang ze in die staat zijn geweest en de lijst met alle mogelijke activiteiten.
E / Tuts +: tijd: 1468701845962 E / Tuts +: verstreken tijd: 15693985 E / Tuts +: meest waarschijnlijke activiteit: DetectedActivity [type = STILL, confidence = 100] E / Tuts +: Activiteit: 3 Waarschijnlijkheid: 100
De DetectedActivity
typewaarden kunnen worden toegewezen aan de volgende waarden:
int IN_VEHICLE = 0; int ON_BICYCLE = 1; int ON_FOOT = 2; int STILL = 3; int UNKNOWN = 4; int TILTING = 5; int WANDELING = 7; int RUNNING = 8;
Het laatste type momentopname - en het moeilijkst om in te stellen omdat het een real-world component vereist - heeft betrekking op BLE (Bluetooth Lau Energy) bakens. Hoewel de API in de buurt buiten het bereik van deze zelfstudie valt, kunt u beacons initialiseren voor uw eigen Google Services-project met de Beacon Tools-app van Google..
Een belangrijk ding om op te merken is dat als je eenmaal een baken hebt geregistreerd bij een Google API-project, je kunt het niet ongedaan maken zonder de beacon id opnieuw in te stellen. Dit betekent dat als u dat project verwijdert, het baken opnieuw moet worden geconfigureerd met de app van uw fabrikant. Voor de Awareness API moet de naamruimte overeenkomen met het Google-project dat u gebruikt voor uw Awareness API-aanroepen. Het bovenstaande baken was al geregistreerd voor een persoonlijk Google-testproject, vandaar de verschillende naamruimte (reflected-disk-355
) van het voorbeeldproject dat bij deze zelfstudie hoort.
In de bovenstaande schermafbeelding ziet u een item onder Bijlagen. De naamruimte voor deze bijlage is reflected-disk-355 (de naamruimte van dit voorbeeld van een voorbeeldproject is tutsplusawareness) En het type is nabijgelegen. U hebt deze informatie nodig voor uw eigen bakens om bijlagen met de Awareness API te detecteren.
Wanneer u beacons hebt geconfigureerd, kunt u terugkeren naar uw code. U moet een maken Lijst
van BeaconState.TypeFilter
objecten zodat uw app bakens en bijlagen kan filteren die geen betrekking hebben op uw toepassing.
private static final List BEACON_TYPE_FILTERS = Arrays.asList (BeaconState.TypeFilter.with (// vervang deze door de waarden van uw beacon "namespace", "type"));
Als u reden hebt om aan te nemen dat uw gebruiker in de buurt van een baken staat, kunt u bijlagen aanvragen bij bakens die voldoen aan de bovenstaande filtervereisten. Hiervoor is de locatietoestemming vereist voor gebruikers op Marshmallow en later.
private void detectBeacons () if (! checkLocationPermission ()) return; Awareness.SnapshotApi.getBeaconState (mGoogleApiClient, BEACON_TYPE_FILTERS) .setResultCallback (new ResultCallback() @Override public void onResult (@NonNull BeaconStateResult beaconStateResult) if (! BeaconStateResult.getStatus (). IsSuccess ()) Log.e ("Test", "Kan geen bakenstatus verkrijgen."); terug te keren; BeaconState beaconState = beaconStateResult.getBeaconState (); if (beaconState == null) Log.e ("Tuts +", "beacon state is null"); else for (BeaconState.BeaconInfo info: beaconState.getBeaconInfo ()) Log.e ("Tuts +", nieuwe tekenreeks (info.getContent ())); );
Deze code logt informatie uit voor de bijlage die is gekoppeld aan het bovenstaande voorbeeldbaken. Voor dit voorbeeld heb ik twee bakens geconfigureerd met dezelfde naamruimte en hetzelfde type om aan te tonen dat meerdere bakens tegelijk kunnen worden gedetecteerd.
E / Tuts +: Oh hi tuts + E / Tuts +: Portable Beacon-info
Hoewel de Snapshot API op een bepaald moment informatie over de context van de gebruiker kan bemachtigen, luistert de Fences API naar specifieke voorwaarden waaraan moet worden voldaan voordat een actie kan worden uitgevoerd. De Fences API is geoptimaliseerd voor efficiënt batterij- en datagebruik, om hoffelijk te zijn jegens uw gebruikers.
Er zijn vijf soorten voorwaarden die u kunt controleren bij het maken van hekken:
Op dit moment hebben weersomstandigheden en plaatsen geen ondersteuning voor hekken. U kunt een hek maken dat een van de ondersteunde functies gebruikt; Een heel handige functie van deze API is echter dat logische bewerkingen kunnen worden toegepast op condities. Je kunt meerdere hekken gebruiken en gebruiken en, of, en niet bewerkingen om de voorwaarden te combineren met de behoeften van uw app.
Uitzending ontvanger
Voordat je een hek maakt, moet je een sleutelwaarde hebben die elke omheining vertegenwoordigt waar je app naar zal luisteren. Om deze tutorial af te maken, bouw je een omheining die detecteert wanneer een gebruiker op een vaste locatie zit, zoals thuis.
private final static String KEY_SITTING_AT_HOME = "sitting_at_home";
Nadat u een sleutel hebt gedefinieerd, kunt u naar een uitzending luisteren voornemen
die die sleutel bevat.
public class FenceBroadcastReceiver breidt BroadcastReceiver uit @Override public void onReceive (Context context, Intent intent) 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 +", "Je bent te lang thuis geweest" );
Nu je een ontvanger hebt gemaakt om naar gebruikersgebeurtenissen te luisteren, is het tijd om je hekken te maken. De eerste AwarenessFence
je zult creëren zal luisteren wanneer de gebruiker zich in een NOG STEEDS
staat.
AwarenessFence activityFence = DetectedActivityFence.during (DetectedActivityFence.STILL);
De tweede afrastering die u gaat maken, wacht tot de gebruiker zich binnen het bereik van een specifieke locatie bevindt. Hoewel dit voorbeeld al lengtegraad- en lengtegraden heeft ingesteld, moet u deze wijzigen zodat ze overeenkomen met de coördinaten die overeenkomen met uw locatie voor testen.
AwarenessFence homeFence = LocationFence.in (39.92, -105.7, 100000, 1000);
Nu je twee hekken hebt, kun je ze combineren om een derde te maken AwarenessFence
door de AwarenessFence.and
operatie.
AwarenessFence sittingAtHomeFence = AwarenessFence.and (homeFence, activityFence);
Eindelijk kunt u een maken PendingIntent
dat zal in jouw worden uitgezonden Uitzending ontvanger
en voeg het toe aan de Awareness API met behulp van de updateFences
methode.
Intent intent = new Intent (ACTION_FENCE); PendingIntent fencePendingIntent = PendingIntent.getBroadcast (this, 0, intent, 0); mFenceBroadcastReceiver = nieuwe FenceBroadcastReceiver (); registerReceiver (mFenceBroadcastReceiver, nieuwe IntentFilter (ACTION_FENCE)); FenceUpdateRequest.Builder builder = new FenceUpdateRequest.Builder (); builder.addFence (KEY_SITTING_AT_HOME, sittingAtHomeFence, fencePendingIntent); Awareness.FenceApi.updateFences (m GoogleApiClient, builder.build ());
Nu logt de app een bericht in wanneer de gebruiker binnen het bereik van de opgegeven locatie zit.
In deze zelfstudie hebt u geleerd over de Awareness API en hoe u actuele informatie over de omgeving van de gebruiker verzamelt. U hebt ook geleerd hoe u een luisteraar kunt registreren voor wijzigingen in de context van de gebruiker en kunt handelen wanneer aan specifieke voorwaarden is voldaan.
Met deze informatie zou u in staat moeten zijn om uw eigen apps uit te breiden en gebruikers meer fantastische ervaringen te bieden op basis van hun huidige locatie, activiteit en andere nuttige waarden.