Google Play Services API di sensibilizzazione

Rendere un'applicazione sensibile al contesto è uno dei modi migliori per offrire servizi utili ai tuoi utenti. Mentre ci sono ancora diversi modi per farlo - inclusi i geofences, il riconoscimento delle attività e altri servizi di localizzazione - Google ha recentemente rilasciato il API di sensibilizzazione, che consente agli sviluppatori di creare app che reagiscono in modo intelligente alla situazione del mondo reale dell'utente. L'API di sensibilizzazione combina l'API Places, l'API delle posizioni, il riconoscimento delle attività e l'API nelle vicinanze, oltre ad aggiungere il supporto per lo stato delle cuffie e il rilevamento del tempo.

In questo tutorial imparerai a conoscere l'API di sensibilizzazione e come accedere istantanee di dati, nonché come creare listener (noto come recinzioni, prendendo il nome da geofences) per combinazioni di condizioni utente che corrispondono agli obiettivi delle tue applicazioni. Ciò può essere utile per un'ampia varietà di app, come giochi basati sulla posizione, offerta di coupon agli utenti nei negozi e avvio di un'app musicale quando si rileva un utente che si esercita. Tutto il codice per questa applicazione di esempio può essere trovato su GitHub.

1. Impostazione della Console per gli sviluppatori

Prima di immergerti nella tua applicazione Android, devi configurare Google Play Services tramite la Console API di Google. Se hai già creato un progetto, puoi saltare il primo passaggio di questa sezione. In caso contrario, puoi fare clic sul link sopra e seguire insieme per creare un nuovo progetto per la tua applicazione.

Passaggio 1: creazione di un progetto

Per creare un nuovo progetto, fai clic sul blu Crea progetto pulsante nella parte superiore centrale dello schermo. 

Questo ti presenta una finestra di dialogo che richiede il nome di un progetto. Per questo tutorial, ho creato un progetto chiamato TutsPlusAwareness. Ci sono alcune restrizioni su cosa puoi chiamare il tuo progetto in quanto sono consentiti solo lettere, numeri, virgolette, trattini, spazi e punti esclamativi.

Una volta colpito Creare, una finestra di dialogo appare nell'angolo in basso a destra della pagina che indica che il progetto è stato creato. Una volta scomparso, il progetto sarà disponibile per la configurazione. Dovresti vedere una schermata simile alla seguente. In caso contrario, fai clic sul logo delle API di Google nell'angolo in alto a sinistra per accedere alla schermata del gestore API.

Passaggio 2: abilitazione dell'API necessaria

Dal Panoramica sulle API di Google schermo, selezionare la casella di ricerca e cercare l'Awareness Awareness. 

Una volta selezionato API di sensibilizzazione dai risultati restituiti, fare clic sul blu Abilitare per consentire all'app di utilizzare l'API di sensibilizzazione. Se questa è la prima API che hai abilitato, ti verrà richiesto di creare una serie di credenziali. Continua a Credenziali pagina per il passaggio 3 di questo tutorial.

Oltre all'API di sensibilizzazione, ci sono altre API che potresti dover abilitare. Se la tua app utilizza il posti funzionalità dell'API di sensibilizzazione, sarà necessario abilitare API di Google Places per Android.

Se la tua app utilizza beacon, dovrai anche abilitare il API Messaggi nelle vicinanze.

Passaggio 3: creazione di una chiave API Android

Per utilizzare le API abilitate, devi generare una chiave API per la tua app Android. Nella pagina delle credenziali per il tuo progetto Google, seleziona API di sensibilizzazione dal menu a discesa in alto e androide dal secondo.

Successivamente verrà visualizzata una schermata in cui è possibile immettere il nome di un pacchetto per la propria app e il certificato SHA1 per la chiave di firma dell'app. Per ottenere la chiave di firma per la chiave di debug su Linux o OS X, immettere il seguente comando in una finestra di terminale.

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

Su Windows, puoi eseguire lo stesso comando con il percorso impostato sulla posizione del tuo debug.keystore file.

Una volta che fai clic sul Crea la chiave API pulsante, ti verrà fornita la chiave API che dovrai utilizzare nella tua applicazione Android.

2. Impostazione del progetto Android

Dopo aver creato una chiave API e attivato le API appropriate, è ora di iniziare a configurare il tuo progetto Android. Per questo tutorial, creeremo un'applicazione di test per imparare l'API. 

Al fine di dimostrare tutte le funzionalità dell'API di sensibilizzazione, questo tutorial si concentrerà sull'utilizzo di un semplice elenco che rappresenta ciascuna funzione utilizzata. Sebbene i dettagli della creazione di questo elenco non saranno discussi, puoi trovare un'implementazione completa nel sorgente GitHub per questo tutorial.

Passaggio 1: impostare i servizi di riproduzione

Per prima cosa dovrai includere la libreria Play Services nel tuo build.gradle file. Sebbene tu possa includere tutti i servizi Google Play, è meglio includere solo i pacchetti necessari per la tua app. 

In questo caso, l'API di sensibilizzazione è disponibile in ContextManager pacchetto, e può essere incluso nel tuo progetto aggiungendo la seguente riga all'interno del tuo dipendenze nodo. Dovrai anche assicurarti che il Libreria AppCompat è incluso, in quanto verrà utilizzato per verificare le autorizzazioni su Marshmallow e sui dispositivi di cui sopra.

compila 'com.google.android.gms: play-services-contextmanager: 9.2.0' compila 'com.android.support:appcompat-v7:23.4.0'

Dopo aver aggiunto la riga sopra, sincronizzare il progetto e aprire il strings.xml file per il tuo progetto. Dovrai posizionare la tua chiave API dalla Console dell'API di Google in un valore stringa.

LA TUA API KEY QUI

Dopo aver aggiunto la tua chiave API, dovrai aprire i tuoi progetti AndroidManifest.xml file. A seconda delle funzioni dell'API di sensibilizzazione utilizzate, dovrai includere le autorizzazioni per la tua app. Se la tua app utilizza il beacon, la posizione, i luoghi o la funzionalità meteorologica dell'API di sensibilizzazione, dovrai includere il ACCESS_FINE_LOCATION autorizzazione. Se è necessario utilizzare la funzionalità di riconoscimento delle attività, allora sarà necessario ACTIVITY_RECOGNITION autorizzazione.

 

Successivamente sarà necessario dichiarare meta-dati all'interno del applicazione nodo che lega la tua app ai servizi dell'API di Google. A seconda dell'utilizzo della tua app, dovrai includere anche com.google.android.geo e com.google.android.nearby metadati per l'utilizzo delle funzioni location, beacon e posti.

    

Quindi dovrai aprire il tuo MainActivity.java file. Aggiungi il GoogleApiClient.OnConnectionFailedListener interfaccia alla tua classe e connettiti ai servizi di Google Play e all'API di sensibilizzazione nel tuo onCreate (Bundle) metodo.

public class MainActivity estende AppCompatActivity implementa 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) 

Passaggio 2: autorizzazioni

Ora che i servizi di riproduzione sono configurati all'interno della tua app per Android, dovrai assicurarti che i tuoi utenti su Android Marshmallow o versioni successive abbiano concesso il permesso alla tua applicazione di utilizzare la loro posizione. Puoi verificare questa autorizzazione in onCreate (Bundle) e prima di accedere a qualsiasi funzionalità che richiede l'autorizzazione di posizione per evitare arresti anomali all'interno della tua app.

private boolean checkLocationPermission () if (! hasLocationPermission ()) Log.e ("Tuts +", "Non ha il permesso di posizione concesso"); requestLocationPermission (); restituisce falso;  return true;  private boolean hasLocationPermission () return ContextCompat.checkSelfPermission (this, Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED; 

Se l'autorizzazione di posizione non è già stata concessa, è possibile quindi richiedere che l'utente lo conceda.

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

Ciò causerà la visualizzazione di una finestra di dialogo che chiede all'utente se desidera autorizzare la tua app a conoscere la loro posizione. 

Quando l'utente ha risposto, il onRequestPermissionsResult () il callback riceverà i risultati e la tua app potrà rispondere di conseguenza.

@Override public void onRequestPermissionsResult (int requestCode, @NonNull String permissions [], @NonNull int [] grantResults) switch (requestCode) case REQUEST_PERMISSION_RESULT_CODE: // Se la richiesta viene annullata, gli array di risultati sono vuoti. if (grantResults.length> 0 && grantResults [0] == PackageManager.PERMISSION_GRANTED) // concesso else Log.e ("Tuts +", "Autorizzazione posizione negata.");  

A questo punto, è necessario completare la configurazione dell'applicazione per l'utilizzo dell'API di sensibilizzazione.

3. Utilizzo dell'API Snapshot

Quando si desidera raccogliere informazioni sul contesto corrente di un utente, è possibile utilizzare la funzionalità di istantanea dell'API di sensibilizzazione. Questa API raccoglierà informazioni a seconda del tipo di chiamata all'API effettuata e memorizzerà nella cache queste informazioni per un rapido accesso attraverso varie app.

Cuffie

Una delle nuove aggiunte ai servizi di gioco tramite l'API di sensibilizzazione è la possibilità di rilevare lo stato delle cuffie di un dispositivo (collegato o scollegato). Questo può essere fatto chiamando getHeadphoneState () sull'API di sensibilizzazione e lettura del HeadphoneState dal HeadphoneStateResult.

private void detectHeadphones () Awareness.SnapshotApi.getHeadphoneState (mGoogleApiClient) .setResultCallback (nuovo ResultCallback() @Override public void onResult (@NonNull HeadphoneStateResult headphoneStateResult) HeadphoneState headphoneState = headphoneStateResult.getHeadphoneState (); if (headphoneState.getState () == HeadphoneState.PLUGGED_IN) Log.e ("Tuts +", "Le cuffie sono collegate");  else Log.e ("Tuts +", "Le cuffie NON sono collegate"); ); 

Una volta che conosci lo stato delle cuffie, la tua app può eseguire tutte le azioni necessarie sulla base di tali informazioni.

Posizione

Sebbene precedentemente disponibile come componente in Google Play Services, la funzione di localizzazione dell'API di sensibilizzazione è stata ottimizzata per l'efficienza e l'utilizzo della batteria. Anziché utilizzare la tradizionale API di posizione e ricevere una posizione a intervalli specificati, è possibile richiedere un'istantanea della posizione unica come tale.

private void detectLocation () if (! checkLocationPermission ()) return;  Awareness.SnapshotApi.getLocation (mGoogleApiClient) .setResultCallback (nuovo ResultCallback() @Override public void onResult (@NonNull LocationResult locationResult) Location 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 ​​()); ); 

Come puoi vedere, devi prima verificare che l'utente abbia concesso l'autorizzazione alla posizione. In tal caso, è possibile recuperare un oggetto posizione standard con una grande quantità di dati relativi alla posizione e alla velocità dell'utente, nonché informazioni sulla precisione di questi dati. 

Dovrai verificare che esista una specifica informazione prima di usarla, in quanto alcuni dati potrebbero non essere disponibili. L'esecuzione di questo codice dovrebbe generare tutti i dati disponibili nel log di sistema Android.

E / Tuts +: Latitude: 39.9255456, Longitudine: -105.02939579999999 E / Tuts +: Provider: Tempo di istantanea: 1468696704662 E / Tuts +: Precisione: 20.0 E / Tuts +: Altitudine: 0.0 E / Tuts +: Velocità: 0.0

posti

Pur non essendo robusto come l'API di Places standard, l'Awareness Awareness fornisce un modo rapido e facile da usare per raccogliere informazioni sui luoghi vicino all'utente. Questa chiamata API restituirà a Elenco di PlaceLikelihood oggetti che contengono a Posto e a galleggiante che rappresenta la probabilità che un utente si trovi in ​​quel luogo (da cui il nome dell'oggetto). 

Ogni Posto l'oggetto può contenere un nome, indirizzo, numero di telefono, tipo di luogo, valutazione dell'utente e altre informazioni utili. È possibile richiedere i luoghi nelle vicinanze per l'utente dopo aver verificato che l'utente abbia concesso l'autorizzazione alla posizione.

private void detectNearbyPlaces () if (! checkLocationPermission ()) return;  Awareness.SnapshotApi.getPlaces (mGoogleApiClient) .setResultCallback (nuovo ResultCallback() @Override public void onResult (@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 +", "Probabilità che l'utente sia qui:" + placeLikelihood.getLikelihood () * 100 + "%"); ); 

Quando esegui il metodo sopra, dovresti vedere un output simile al seguente nella console Android. Se un valore non è disponibile per un numero, -1 sarà restituito.

E / Tuts +: North Side Tavern 12708 Lowell Blvd, Broomfield, CO 80020, USA E / Tuts +: Voto: 4.7 E / Tuts +: Probabilità che l'utente sia qui: 10.0% E / Tuts +: Quilt Store 12710 Lowell Blvd, Broomfield, CO 80020, USA E / Tuts +: Punteggio: 4.3 E / Tuts +: Probabilità che l'utente sia qui: 10.0% E / Tuts +: Absolute Floor Care 3508 W 126th Pl, Broomfield, CO 80020, USA E / Tuts +: Rating: -1.0

Tempo metereologico

Un'altra delle nuove aggiunte a Google Play Services tramite l'API di sensibilizzazione è la possibilità di ottenere le condizioni meteorologiche per un utente. Questa funzione richiede anche l'autorizzazione di posizione per gli utenti su Marshmallow e versioni successive. 

Usando questa richiesta, sarai in grado di ottenere la temperatura nell'area dell'utente in Fahrenheit o Celsius. Puoi anche scoprire come si sente la temperatura, il punto di rugiada (la temperatura in cui l'acqua nell'aria può iniziare a condensare in rugiada), la percentuale di umidità e le condizioni meteorologiche.

private void detectWeather () if (! checkLocationPermission ()) return;  Awareness.SnapshotApi.getWeather (mGoogleApiClient) .setResultCallback (nuovo ResultCallback() @Override public void onResult (@NonNull WeatherResult weatherResult) Weather weather = weatherResult.getWeather (); Log.e ("Tuts +", "Temp:" + weather.getTemperature (Weather.FAHRENHEIT)); Log.e ("Tuts +", "Mi piace:" + weather.getFeelsLikeTemperature (Weather.FAHRENHEIT)); Log.e ("Tuts +", "Punto di rugiada:" + weather.getDewPoint (Weather.FAHRENHEIT)); Log.e ("Tuts +", "Umidità:" + weather.getHumidity ()); if (weather.getConditions () [0] == Weather.CONDITION_CLOUDY) Log.e ("Tuts +", "Sembra che ci siano delle nuvole là fuori"); ); 

Il codice sopra dovrebbe produrre qualcosa di simile a questo.

E / Tuts +: Temp: 88.0 E / Tuts +: Mi piace: 88.0 E / Tuts +: Punto di rugiada: 50.0 E / Tuts +: Umidità: 28 E / Tuts +: Sembra che ci siano delle nuvole là fuori

Una cosa importante da notare qui è che il valore delle condizioni meteorologiche è memorizzato come un int. L'intero elenco di valori di condizione può essere trovato nell'oggetto Meteo.

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;

Attività

L'attività dei tuoi utenti svolgerà un ruolo importante nel modo in cui interagiscono con il loro dispositivo, e il rilevamento di tale attività ti consentirà di offrire un'esperienza utente più fluida. 

Ad esempio, se hai un'app di fitness, potresti voler rilevare quando un utente è in esecuzione in modo da poter iniziare a registrare una sessione di Google Fit, oppure potresti voler inviare una notifica al tuo utente se rilevi che sono stati ancora per troppe ore durante il giorno. 

Usando il getDetectedActivity () richiamare l'API di sensibilizzazione, è possibile ottenere un elenco di attività probabili e per quanto tempo l'utente ha eseguito ciascuna di esse.

private void detectActivity () Awareness.SnapshotApi.getDetectedActivity (mGoogleApiClient) .setResultCallback (nuovo ResultCallback() @Override public void onResult (@NonNull DetectedActivityResult detectedActivityResult) ActivityRecognitionResult result = detectedActivityResult.getActivityRecognitionResult (); Log.e ("Tuts +", "time:" + result.getTime ()); Log.e ("Tuts +", "tempo trascorso:" + result.getElapsedRealtimeMillis ()); Log.e ("Tuts +", "Attività più probabile:" + result.getMostProbableActivity (). ToString ()); for (DetectedActivity activity: result.getProbableActivities ()) Log.e ("Tuts +", "Activity:" + activity.getType () + "Likelihood:" + activity.getConfidence ()); ); 

Il metodo sopra mostrerà l'attività più probabile per l'utente, per quanto tempo sono stati in quello stato e l'elenco di tutte le attività possibili.

E / Tuts +: tempo: 1468701845962 E / Tuts +: tempo trascorso: 15693985 E / Tuts +: Attività più probabile: DetectedActivity [tipo = STILL, confidence = 100] E / Tuts +: Activity: 3 Probabilità: 100

Il DetectedActivity i valori di tipo possono essere associati ai seguenti valori:

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;

Beacons

Il tipo finale di istantanea - e il più difficile da configurare perché richiede un componente del mondo reale - coinvolge BLE (Bluetooth LOW Energia) fari. Sebbene l'API nelle vicinanze non rientri nell'ambito di questo tutorial, puoi inizializzare i beacon per il tuo progetto di servizi Google utilizzando l'app Google Beacon Tools.

Una cosa importante da notare è che una volta registrato un beacon in un progetto API di Google, non è possibile annullare la registrazione senza reimpostare l'ID beacon. Ciò significa che se elimini quel progetto, il beacon dovrà essere riconfigurato usando l'app del produttore. Per l'API di sensibilizzazione, lo spazio dei nomi deve corrispondere al progetto Google che si sta utilizzando per le chiamate all'API di sensibilizzazione. Il suddetto faro era già stato registrato in un progetto Google di test personale, quindi il diverso spazio dei nomi (riflessa disk-355) da quello del progetto di esempio associato a questo tutorial.

Nell'immagine sopra, puoi vedere un oggetto sotto allegati. Lo spazio dei nomi per questo allegato è riflessa disk-355 (questo spazio dei nomi del progetto di esempio di questo tutorial è tutsplusawareness) E il tipo è nelle vicinanze. Queste informazioni saranno necessarie per i propri beacon al fine di rilevare gli allegati con l'API di sensibilizzazione.

Quando hai configurato i beacon, puoi tornare al tuo codice. Dovrai creare un Elenco di BeaconState.TypeFilter oggetti in modo che la tua app possa filtrare i beacon e gli allegati che non riguardano la tua applicazione. 

Elenco statico finale privato BEACON_TYPE_FILTERS = Arrays.asList (BeaconState.TypeFilter.with (// sostituiscile con i valori del tuo beacon "namespace", "type"));

Se hai motivo di credere che il tuo utente sia vicino a un faro, puoi richiedere gli allegati da beacon che soddisfano i requisiti di filtro sopra indicati. Ciò richiederà il permesso di posizione per gli utenti su Marshmallow e versioni successive.

private void detectBeacons () if (! checkLocationPermission ()) return;  Awareness.SnapshotApi.getBeaconState (mGoogleApiClient, BEACON_TYPE_FILTERS) .setResultCallback (nuovo ResultCallback() @Override public void onResult (@NonNull BeaconStateResult beaconStateResult) if (! BeaconStateResult.getStatus (). IsSuccess ()) Log.e ("Test", "Impossibile ottenere lo stato beacon"); ritorno;  BeaconState beaconState = beaconStateResult.getBeaconState (); if (beaconState == null) Log.e ("Tuts +", "beacon state is null");  else for (BeaconState.BeaconInfo informazioni: beaconState.getBeaconInfo ()) Log.e ("Tuts +", new String (info.getContent ())); ); 

Questo codice annulla le informazioni per l'allegato associato al beacon di esempio sopra. Per questo esempio, ho configurato due beacon con lo stesso spazio dei nomi e tipo per dimostrare che è possibile rilevare più beacon contemporaneamente.

E / Tuts +: Oh hi tuts + E / Tuts +: informazioni Portable Beacon

4. Utilizzo dell'API di Fences

Mentre l'API Snapshot è in grado di acquisire informazioni sul contesto dell'utente in un determinato momento, l'API Fences ascolta le condizioni specifiche da soddisfare prima di consentire l'esecuzione di un'azione. L'API di Fences è ottimizzata per un utilizzo efficiente della batteria e dei dati, in modo da essere cortesi con i tuoi utenti. 

Esistono cinque tipi di condizioni che è possibile verificare quando si creano recinzioni:

  • condizioni del dispositivo, come l'utente che ha le cuffie scollegate o collegate
  • posizione, simile a un geofence standard
  • la presenza di specifici BLE beacon
  • attività dell'utente, come la corsa o la guida
  • tempo

In questo momento, le condizioni meteorologiche e i luoghi non hanno il supporto per le recinzioni. È possibile creare una recinzione che utilizza una delle funzioni supportate; tuttavia, una funzionalità molto utile di questa API è che le operazioni logiche possono essere applicate alle condizioni. Puoi prendere più recinti e usare e, o, e non operazioni per combinare le condizioni per soddisfare le esigenze della tua app. 

Creare un BroadcastReceiver

Prima di creare la tua recinzione, dovrai disporre di un valore chiave che rappresenti ciascun recinto che la tua app ascolterà. Per terminare questo tutorial, costruirai una recinzione che rileva quando un utente è seduto in un luogo prestabilito, come ad esempio la loro casa.

stringa statica finale privata KEY_SITTING_AT_HOME = "sitting_at_home";

Una volta definita una chiave, è possibile ascoltare una trasmissione Intento quello contiene quella chiave.

public class FenceBroadcastReceiver estende BroadcastReceiver @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 +", "Sei stato seduto a casa troppo a lungo" ); 

Creare recinzioni

Ora che hai un ricevitore creato per ascoltare eventi utente, è il momento di creare le tue recinzioni. Il primo AwarenessFence tu creerai ascolterà quando l'utente è in a ANCORA stato.

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

Il secondo recinto che creerai attenderà che l'utente si trovi nel raggio di una posizione specifica. Mentre questo campione ha già i valori per latitudine e longitudine già impostati, dovrai cambiarli per farli corrispondere a qualsiasi coordinata corrisponda alla tua posizione per i test.

AwarenessFence homeFence = LocationFence.in (39,92, -105,7, 100000, 1000);

Ora che hai due recinti, puoi combinarli per creare un terzo AwarenessFence usando il AwarenessFence.and operazione.

Consapevolezza seduta sedutaAtHomeFence = AwarenessFence.and (homeFence, activityFence);

Infine, puoi creare un PendingIntent che sarà trasmesso al tuo BroadcastReceiver e aggiungilo all'API di sensibilizzazione usando il updateFences metodo.

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

A questo punto, l'app registra un messaggio quando l'utente è seduto nel raggio della posizione specificata.

Conclusione

In questo tutorial, hai imparato a conoscere l'API di sensibilizzazione e come raccogliere informazioni aggiornate sull'ambiente dell'utente. Hai anche imparato come registrare un listener per le modifiche nel contesto dell'utente e agire quando sono state soddisfatte determinate condizioni. 

Con queste informazioni, dovresti essere in grado di espandere le tue app e fornire agli utenti esperienze più incredibili in base alla loro posizione attuale, attività e altri valori utili.