Serviciile Google Play API de conștientizare

Efectuarea unei contexte cu aplicații este una dintre cele mai bune modalități de a oferi utilizatorilor dvs. servicii utile. În timp ce există încă mai multe moduri de a face acest lucru - inclusiv geofenii, recunoașterea activității și alte servicii de localizare - Google a lansat recent Conștientizare API, care permite dezvoltatorilor să creeze aplicații care reacționează în mod inteligent la situația reală a utilizatorului. API-ul de conștientizare combină API-urile Locații, API Locații, Recunoașterea activității și API-ul din apropiere, precum și adăugarea de asistență pentru detectarea stării căștilor și a vremii.

În acest tutorial veți afla despre API-ul de conștientizare și modul de accesare instantanee de date, precum și cum să creați ascultători (cunoscuți sub numele de garduri, luând numele lor de la geofences) pentru combinații de condiții de utilizare care corespund scopurilor aplicațiilor dvs. Acest lucru poate fi util pentru o mare varietate de aplicații, cum ar fi jocuri bazate pe locație, care oferă cupoane utilizatorilor din magazine și care pornește o aplicație muzicală atunci când descoperiți un utilizator care se exersează. Toate codurile pentru această aplicație probă pot fi găsite pe GitHub.

1. Configurarea Consolei pentru dezvoltatori

Înainte de a vă scufunda în aplicația Android, va trebui să configurați Servicii Google Play prin Consola Google API. Dacă aveți deja un proiect creat, puteți trece peste primul pas al acestei secțiuni. Dacă nu, puteți face clic pe link-ul de mai sus și puteți urmări împreună pentru a crea un nou proiect pentru aplicația dvs..

Pasul 1: Crearea unui proiect

Pentru a crea un nou proiect, faceți clic pe albastru Creați un proiect butonul din centrul de sus al ecranului. 

Aceasta vă prezintă un dialog care solicită numele unui proiect. Pentru acest tutorial, am creat un proiect numit TutsPlusAwareness. Există unele restricții cu privire la ceea ce puteți numi proiectul dvs. deoarece sunt permise numai literele, numerele, citatele, cratimele, spațiile și punctele de exclamare.

Odată ce ai lovit Crea, în colțul din dreapta jos al paginii apare un dialog care indică faptul că proiectul este în curs de creare. După ce a dispărut, proiectul dvs. va fi disponibil pentru configurare. Ar trebui să vedeți un ecran similar cu următorul. Dacă nu, faceți clic pe sigla API-uri Google din colțul din stânga sus pentru a ajunge la ecranul managerului API.

Pasul 2: Activarea API-ului necesar

De la Prezentarea Google API-uri , selectați caseta de căutare și căutați API-ul de conștientizare. 

Odată ce ați selectat Conștientizare API din rezultatele returnate, faceți clic pe albastru Permite pentru a permite aplicației dvs. să utilizeze API-ul de conștientizare. Dacă acesta este primul API pe care l-ați activat, vi se va solicita să creați un set de acreditări. Continuați cu scrisori de acreditare pentru pasul 3 al acestui tutorial.

În plus față de API-ul de conștientizare, există API suplimentare care ar putea fi necesare pentru a activa. Dacă aplicația dvs. utilizează Locuri funcționalitatea API-ului de conștientizare, va trebui să activați API-ul Google Locații pentru Android.

Dacă aplicația dvs. utilizează balize, va trebui să activați și Mesajul API din apropiere.

Pasul 3: Crearea unei chei API Android

Pentru a utiliza API-urile activate, va trebui să generați o cheie API pentru aplicația Android. În pagina de acreditare pentru proiectul dvs. Google, selectați Conștientizare API din meniul derulant sus și Android de la al doilea.

În continuare, veți ajunge la un ecran unde puteți introduce un nume de pachet pentru aplicația dvs. și certificatul SHA1 pentru cheia de semnare a aplicației. Pentru a obține cheia de semnare pentru cheia de depanare pe Linux sau OS X, introduceți următoarea comandă într-o fereastră terminală.

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

În Windows, puteți executa aceeași comandă cu calea setată la locația dvs. debug.keystore fişier.

După ce faceți clic pe Creați cheia API , vi se va da cheia API pe care va trebui să o utilizați în aplicația Android.

2. Configurarea Proiectului Android

După ce ați creat o cheie API și ați activat API-urile potrivite, este timpul să începeți configurarea proiectului dvs. Android. Pentru acest tutorial, vom crea o aplicație de testare pentru a afla API-ul. 

Pentru a demonstra toate caracteristicile API-ului Conștientizare, acest tutorial se va concentra pe utilizarea unei liste simple care să reprezinte fiecare caracteristică utilizată. Deși detaliile creării acestei liste nu vor fi discutate, puteți găsi o implementare completă în sursa GitHub pentru acest tutorial.

Pasul 1: configurați serviciile Play

În primul rând, va trebui să includeți biblioteca de servicii Play în build.gradle fişier. În timp ce puteți include toate serviciile Google Play, este mai bine să includeți numai pachetele de care aveți nevoie pentru aplicația dvs.. 

În acest caz, API-ul de conștientizare este disponibil în ContextManager pachet și poate fi inclus în proiect prin adăugarea următoarei linii: dependențe nodul. Veți dori, de asemenea, să vă asigurați că Biblioteca AppCompat este inclus, deoarece acest lucru va fi folosit pentru verificarea permisiunilor pentru Marshmallow și dispozitivele de mai sus.

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

Odată ce ați adăugat linia de mai sus, sincronizați-vă proiectul și deschideți-l strings.xml fișier pentru proiectul dvs. Veți dori să plasați cheia API din Consola API Google într-o valoare de șir.

API-ul tau este aici

După ce ați adăugat cheia API, va trebui să deschideți proiectul AndroidManifest.xml fişier. În funcție de caracteristicile API-ului de conștientizare pe care îl utilizați, va trebui să includeți permisiuni pentru aplicația dvs. Dacă aplicația dvs. folosește farul, locația, locațiile sau funcționalitatea meteo a API-ului Conștientizare, atunci va trebui să includeți ACCESS_FINE_LOCATION permisiune. Dacă trebuie să utilizați funcția de recunoaștere a activității, atunci veți avea nevoie de ACTIVITY_RECOGNITION permisiune.

 

În continuare va trebui să declarați meta-date în cadrul cerere nod care conectează aplicația dvs. la serviciile Google API. În funcție de ce utilizează aplicația dvs., va trebui să includeți și com.google.android.geo și com.google.android.nearby metadate pentru utilizarea funcțiilor de locație, balize și locații.

    

Apoi va trebui să vă deschideți MainActivity.java fişier. Adaugă GoogleApiClient.OnConnectionFailedListener să vă conectați la clasa dvs. și să vă conectați la serviciile Google Play și la API-ul de conștientizare în dvs. onCreate (Bundle) metodă.

public class MainActivity se extinde AppCompatActivity implementează GoogleApiClient.OnConnectionFailedListener @Override protejat void onCreate (Bundle savedInstanceState) super.onCreate (savedInstanceState); setContentView (R.layout.activity_main); mGoogleApiClient = nou GoogleApiClient.Builder (acest) .addApi (Awareness.API) .enableAutoManage (acest, acest) .build (); mGoogleApiClient.connect ();  @Override publice void onConnectionFailed (@NonNull ConnectionResult connectionResult) 

Pasul 2: Permisiuni

Acum, când Serviciile Play sunt configurate în aplicația dvs. Android, va trebui să vă asigurați că utilizatorii dvs. de pe Android Marshmallow sau de mai sus au acordat permisiunea ca aplicația dvs. să utilizeze locația lor. Puteți verifica această permisiune onCreate (Bundle) și înainte de a accesa orice caracteristică care necesită permisiunea de locație, pentru a evita accidentele din cadrul aplicației.

private boolean checkLocationPermission () if (! hasLocationPermission ()) Log.e ("Tuts +", "Nu are permisiunea de locație acordată"); requestLocationPermission (); return false;  return true;  boolean privat hasLocationPermission () returnează ContextCompat.checkSelfPermission (this, Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED; 

Dacă permisiunea de locație nu a fost deja acordată, puteți solicita ca utilizatorul să o acorde.

private final static int REQUEST_PERMISSION_RESULT_CODE = 42; cererea privată voidLocationPermission () ActivityCompat.requestPermissions (MainActivity.this, new String [] Manifest.permission.ACCESS_FINE_LOCATION, REQUEST_PERMISSION_RESULT_CODE); 

Acest lucru va determina apariția unui dialog de sistem prin care să se solicite utilizatorului dacă doresc să acorde permisiunea aplicației dvs. de a-și cunoaște locația. 

Când utilizatorul a răspuns, onRequestPermissionsResult () inversarea apelurilor va primi rezultatele, iar aplicația dvs. poate răspunde în mod corespunzător.

@Override public void onRequestPermissionsResult (int requestCode, @NonNull permisiuni String [], @NonNull int [] grantResults) comutare (requestCode) caz REQUEST_PERMISSION_RESULT_CODE: // Dacă cererea este anulată, matricele rezultate sunt goale. dacă (grantResults.length> 0 && grantResults [0] == PackageManager.PERMISSION_GRANTED) // acordat altceva Log.e ("Tuts +", "permisiunea de locație a fost respinsă");  

În acest moment ar trebui să finalizați configurarea aplicației pentru utilizarea API-ului de conștientizare.

3. Folosind API Snapshot

Când doriți să obțineți informații despre contextul actual al unui utilizator, puteți utiliza funcția instantanee a API-ului Conștientizare. Acest API va aduna informații în funcție de tipul de apel API și va memora aceste informații pentru a avea acces rapid în diferite aplicații.

Căști

Una dintre noile adăugiri la serviciile Play prin API-ul de conștientizare este capacitatea de a detecta starea căștilor unui dispozitiv (conectat sau deconectat). Acest lucru se poate face prin apelare getHeadphoneState () pe API de conștientizare și citirea acestuia HeadphoneState de la HeadphoneStateResult.

private void detectHeadphones () Awareness.SnapshotApi.getHeadphoneState (mGoogleApiClient) .setResultCallback (noul rezultatCallback() @Overide public void onResult (@NonNull HeadphoneStateResult headphoneStateResult) HeadphoneState headphoneState = headphoneStateResult.getHeadphoneState (); dacă (headphoneState.getState () == HeadphoneState.PLUGGED_IN) Log.e ("Tuts +", "Căștile sunt conectate.");  altceva Log.e ("Tuts +", "Căștile NU sunt conectate."); ); 

Odată ce cunoașteți starea căștilor, aplicația dvs. poate efectua toate acțiunile necesare pe baza acestor informații.

Locație

Deși a fost disponibilă anterior ca o componentă în serviciile Google Play, funcția de localizare a API-ului Awareness a fost optimizată pentru eficiență și utilizare a bateriei. În loc să utilizați API-ul de localizare tradițional și să primiți o locație la intervale specificate, puteți solicita o captură de locație unică.

private void detectLocation () if (! checkLocationPermission ()) retur;  Awareness.SnapshotApi.getLocation (mGoogleApiClient) .setResultCallback (noul ResultCallback() @Override public void onResult (@NonNull LocationResult locationResult) Locația locației = locResult.getLocation (); Log.e ("Tuts +", "Latitude:" + location.getLatitude () + ", Longitudine:" + loc.getLongitude ()); Log.e ("Tuts +", "Furnizor:" + loc.getProvider () + "timp:" + location.getTime ()); dacă location.hasAccuracy ()) Log.e ("Tuts +", "Acuratețe:" + location.getAccuracy ());  dacă location.hasAltitude ()) Log.e ("Tuts +", "Altitudine:" + location.getAltitude ());  dacă location.hasBearing ()) Log.e ("Tuts +", "Bearing:" + location.getBearing ());  dacă location.hasSpeed ​​()) Log.e ("Tuts +", "Viteză:" + location.getSpeed ​​()); ); 

După cum puteți vedea, va trebui mai întâi să verificați dacă utilizatorul a acordat permisiunea de locație. Dacă acestea există, puteți prelua un obiect Locație standard cu o cantitate mare de date despre locația și viteza utilizatorului, precum și informații despre exactitatea acestor date. 

Veți dori să verificați dacă există o anumită informație înainte de ao utiliza, deoarece este posibil ca unele date să nu fie disponibile. Rularea acestui cod ar trebui să furnizeze toate datele disponibile în jurnalul de sistem Android.

E / Tuts +: Latitudine: 39.9255456, Longitudine: -105.02939579999999 E / Tuts +: Furnizor: Timp instantaneu: 1468696704662 E / Tuts +: Acuratete: 20.0 E / Tuts +: Altitudine: 0.0 E / Tuts +:

Locuri

Deși nu este la fel de robust ca API-ul Locații standard, API-ul de conștientizare oferă o modalitate rapidă și ușor de folosit pentru a culege informații despre locurile din apropierea utilizatorului. Acest apel API va returna a Listă de PlaceLikelihood obiecte care conțin a Loc și a pluti reprezentând cât de probabil este că un utilizator este în acel loc (de aici numele obiectului). 

Fiecare Loc obiect poate conține un nume, o adresă, un număr de telefon, un tip de locație, un rating de utilizator și alte informații utile. Puteți solicita locațiile din apropiere pentru utilizator după ce verificați dacă utilizatorul are permisiunea de locație acordată.

private void detectNearbyPlaces () if (! checkLocationPermission ()) retur;  Awareness.SnapshotApi.getPlaces (mGoogleApiClient) .setResultCallback (noul ResultCallback() @Override public void onResult (@NonNull PlacesResult placesResult) Place locul; pentru (PlaceLikelihood placeLikelihood: placesResult.getPlaceLikelihoods ()) loc = placeLikelihood.getPlace (); Log.e ("Tuts +", loc.getName ()) toString () + "\ n" + place.getAddress (). Log.e ("Tuts +", "Evaluare:" + loc.getRating ()); Log.e ("Tuts +", "Probabilitatea ca utilizatorul să fie aici:" + placeLikelihood.getLikelihood () * 100 + "%"); ); 

Când executați metoda de mai sus, ar trebui să vedeți ieșiri similare cu cele de mai jos în consola Android. Dacă o valoare nu este disponibilă pentru un număr, -1 va fi returnat.

E / Tuts +: Poarta de Nord a Tavernei 12708 Lowell Blvd, Broomfield, CO 80020, SUA E / Tuts +: Evaluare: 4.7 E / Tuts +: Probabilitatea ca utilizatorul sa fie aici: 10.0% E / Tuts + 80020, Statele Unite ale Americii E / Tuts +: Evaluare: 4.3 E / Tuts +: Probabilitatea ca utilizatorul sa fie aici: 10.0% E / Tuts +: Absolute Floor Care 3508 W 126th PL, Broomfield, CO 80020, USA E / Tuts +

Vreme

O altă adăugare nouă în serviciile Google Play prin API-ul de conștientizare este abilitatea de a obține condițiile meteorologice pentru un utilizator. Această caracteristică necesită, de asemenea, permisiunea de locație pentru utilizatorii de pe Marshmallow și mai târziu. 

Folosind această solicitare, veți putea obține temperatura în zona utilizatorului fie în Fahrenheit, fie în Celsius. De asemenea, puteți afla cum se simte temperatura, punctul de rouă (temperatura în care apa din aer poate începe să se condenseze în rouă), procentul de umiditate și condițiile meteorologice.

private void detectWeather () if (! checkLocationPermission ()) retur;  Awareness.SnapshotApi.getWeather (mGoogleApiClient) .setResultCallback (noul ResultCallback() @Override public void peResult (@NonNull WeatherResult weatherResult) Vremea meteo = weatherResult.getWeather (); Log.e ("Tuts +", "Temp:" + weather.getTemperature (Weather.FAHRENHEIT)); Log.e ("Tuts +", "Se simte ca:" + weather.getFeelsLikeTemperature (Weather.FAHRENHEIT)); Log.e ("Tuts +", "Punct de rouă:" + weather.getDewPoint (Weather.FAHRENHEIT)); Log.e ("Tuts +", "Umiditate:" + meteo.Humiditate ()); if (weather.getConditions () [0] == Weather.CONDITION_CLOUDY) Log.e ("Tuts +", "Se pare că sunt niște nori acolo"); ); 

Codul de mai sus ar trebui să producă ceva similar cu acesta.

E / Tuts +: Temp: 88.0 E / Tuts +: Se simte ca: 88.0 E / Tuts +: Punct de rouă: 50.0 E / Tuts +: Umiditate: 28 E / Tuts +

Un lucru important care trebuie menționat aici este faptul că valoarea condiției meteo este stocată ca o valoare int. Întreaga listă a valorilor condițiilor poate fi găsită în obiectul Vremea.

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;

Activitate

Activitatea utilizatorului va juca un rol important în modul în care acestea interacționează cu dispozitivul lor și detectarea acelei activități vă va permite să oferiți o experiență de utilizare mai fluidă. 

De exemplu, dacă aveți o aplicație de fitness, este posibil să doriți să detectați când un utilizator rulează, astfel încât să puteți începe înregistrarea unei sesiuni Google Fit sau dacă doriți să trimiteți o notificare utilizatorului dacă descoperiți că au fost încă prea multe ore în timpul zilei. 

Utilizarea getDetectedActivity () apelați în API-ul Awareness, puteți obține o listă de activități probabile și durata de utilizare a fiecăruia de către utilizator.

private void detectActivity () Conștientizare.SnapshotApi.getDetectedActivity (mGoogleApiClient) .setResultCallback (noul ResultCallback() @Override public void peResult (@NonNull DetectedActivityResult detectedActivityResult) ActivityRecognitionResult result = detectActivityResult.getActivityRecognitionResult (); Log.e ("Tuts +", "timp:" + result.getTime ()); Log.e ("Tuts +", "timp scurs:" + result.getElapsedRealtimeMillis ()); Log.e ("Tuts +", "Activitatea cea mai probabilă:" + result.getMostProbableActivity (). ToString ()); pentru (Activitate detectatăactivitate: result.getProbableActivities ()) Log.e ("Tuts +", "Activitate:" + activity.getType () + "Probabilitate:" + activity.getConfidence ()); ); 

Metoda de mai sus va afișa cea mai probabilă activitate pentru utilizator, cât timp au fost în acea stare și lista tuturor activităților posibile.

E / Tuts +:: timp: 1468701845962 E / Tuts +: timp scurs: 15693985 E / Tuts +: Activitatea cea mai probabilă: DetectedActivity [tip = STILL, confidence = 100] E / Tuts +

DetectedActivity valorile de tip pot fi mapate la următoarele 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

Tipul final de instantaneu - și cel mai greu de configurat pentru că necesită o componentă din lumea reală - implică BLE (Bluetooth LAu Energy). În timp ce API-ul din apropiere se află în afara sferei de aplicare a acestui tutorial, puteți inițializa balize pentru propriul proiect Google Services folosind aplicația Google Beacon Tools.

Un lucru important este faptul că odată ce ați înregistrat un beacon la un proiect Google API, nu îl puteți anula înregistrarea fără resetarea ID-ului de baliză. Aceasta înseamnă că, dacă ștergeți proiectul, este necesar ca farul să fie reconfigurat utilizând aplicația producătorului. Pentru API-ul de conștientizare, spațiul de nume trebuie să se potrivească cu proiectul Google pe care îl utilizați pentru apelurile API de conștientizare. Beaconul de mai sus a fost deja înregistrat la un proiect personal Google de testare, de unde și spațiul de nume diferit (reflectate-disc-355) de cel al proiectului eșantion asociat acestui tutorial.

În captura de ecran de mai sus, puteți vedea un articol de sub Fișiere atașate. Spațiul de nume pentru acest atașament este reflectate-disc-355 (spațiul de nume al acestui exemplu al tutorialului este tutsplusawareness) Și tipul este din apropiere. Veți avea nevoie de aceste informații pentru propriile dvs. balize pentru a detecta atașamentele cu API-ul de conștientizare.

Când ați configurat balize, puteți reveni la codul dvs. Va trebui să creați o Listă de BeaconState.TypeFilter astfel încât aplicația dvs. să poată elimina farurile și atașamentele care nu se referă la aplicația dvs.. 

lista privată statică finală BEACON_TYPE_FILTERS = Arrays.asList (BeaconState.TypeFilter.with (// înlocuiți-le cu valorile beaconului "namespace", "type"));

Dacă aveți motive să credeți că utilizatorul dvs. este aproape de un far, puteți solicita atașamente din balize care corespund cerințelor de filtrare de mai sus. Acest lucru va necesita permisiunea de locație pentru utilizatorii de pe Marshmallow și mai târziu.

private void detectBeacons () if (! checkLocationPermission ()) retur;  Awareness.SnapshotApi.getBeaconState (mGoogleApiClient, BEACON_TYPE_FILTERS) .setResultCallback (noul ResultCallback() @Override public void onResult (@NonNull BeaconStateResult beaconStateResult) if (! BeaconStateResult.getStatus () esteSuccess ()) Log.e ("Test", "Nu se poate obține starea beaconului"; întoarcere;  BeaconState beaconState = beaconStateResult.getBeaconState (); dacă (beaconState == null) Log.e ("Tuts +", "starea balizei este nulă");  altceva pentru (BeaconState.BeaconInfo info: beaconState.getBeaconInfo ()) Log.e ("Tuts +", nou String (info.getContent ())); ); 

Acest cod va deconecta informațiile pentru atașamentul asociat cu baliza de exemplu de mai sus. Pentru acest exemplu, am configurat două balize cu același spațiu de nume și același tip pentru a demonstra că mai multe balize pot fi detectate simultan.

E / Tuts +: Oh hi tuts + E / Tuts +: Informații despre Beacon portabil

4. Folosind API Fences

În timp ce API-ul Snapshot poate să obțină informații despre contextul utilizatorului la o anumită oră, API Fence ascultă condițiile specifice care trebuie îndeplinite înainte de a permite efectuarea unei acțiuni. API-ul Fences este optimizat pentru utilizarea eficientă a bateriilor și a datelor, astfel încât să fie amabil pentru utilizatorii dvs.. 

Există cinci tipuri de condiții pe care le puteți verifica atunci când creați garduri:

  • condițiile utilizatorului, cum ar fi utilizatorul care are deconectat sau conectat căștile
  • locație, similară cu o geofenă standard
  • prezența unor balize specifice BLE
  • activității utilizatorilor, cum ar fi alergarea sau conducerea vehiculelor
  • timp

În acest moment, condițiile meteorologice și locurile nu au suport pentru garduri. Puteți crea un gard care utilizează oricare dintre funcțiile acceptate; totuși, o caracteristică foarte utilă a acestui API este că operațiile logice pot fi aplicate condițiilor. Puteți lua mai multe garduri și utilizați și, sau, și nu pentru a combina condițiile pentru a se potrivi nevoilor aplicației dvs.. 

Creeaza o BroadcastReceiver

Înainte de a vă crea gardul, va trebui să aveți o valoare cheie reprezentând fiecare gard pe care aplicația dvs. îl va asculta. Pentru a termina acest tutorial, veți construi un gard care detectează când un utilizator stă la o locație stabilită, cum ar fi casa.

privat static final String KEY_SITTING_AT_HOME = "sitting_at_home";

Odată ce ați definit o cheie, puteți asculta o emisiune scop care conține acea cheie.

clasa publică FenceBroadcastReceiver extinde BroadcastReceiver @Override public void onReceive (Context context, intent intenție) if (TextUtils.equals (ACTION_FENCE, intent.getAction ())) FenceState fenceState = FenceState.extract (intent); dacă TextEtils.equals (KEY_SITTING_AT_HOME, fenceState.getFenceKey ())) if (fenceState.getCurrentState () == FenceState.TRUE) Log.e ("Tuts +", "Ați stat mult timp acasă" ); 

Creați garduri

Acum că aveți un receptor creat pentru a asculta evenimentele utilizatorilor, este timpul să vă creați gardurile. Primul AwarenessFence pe care le veți crea va asculta atunci când utilizatorul este într-o ÎNCĂ stat.

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

Al doilea gard pe care îl veți crea va aștepta ca utilizatorul să se afle în raza unei anumite locații. În timp ce această mostră are valori pentru latitudinea și longitudinea deja setate, veți dori să le schimbați pentru a se potrivi cu oricare dintre coordonatele se potrivesc cu locația dvs. pentru testare.

AwarenessFence homeFence = LocațiaFence.in (39.92, -105.7, 100000, 1000);

Acum, că aveți două garduri, le puteți combina pentru a crea oa treia AwarenessFence folosind AwarenessFence.and operație.

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

În cele din urmă, puteți crea un PendingIntent care va fi difuzat către dvs. BroadcastReceiver și adăugați-l la API-ul de conștientizare utilizând updateFences metodă.

Intenția intenției = intenția nouă (ACTION_FENCE); PendingIntent fencePendingIntent = PendingIntent.getBroadcast (aceasta, 0, intenție, 0); mFenceBroadcastReceiver = nou FenceBroadcastReceiver (); registerReceiver (mFenceBroadcastReceiver, noul IntentFilter (ACTION_FENCE)); FenceUpdateRequest.Builder builder = nou FenceUpdateRequest.Builder (); builder.addFence (KEY_SITTING_AT_HOME, sittingAtHomeFence, fencePendingIntent); Awareness.FenceApi.updateFences (mGoogleApiClient, builder.build ());

Acum, aplicația va înregistra un mesaj atunci când utilizatorul se află în raza locului specificat.

Concluzie

În acest tutorial, ați aflat despre API-ul de conștientizare și cum puteți aduna informații curente despre mediul utilizatorului. De asemenea, ați învățat cum să înregistrați un ascultător pentru schimbări în contextul utilizatorului și să acționați atunci când au fost îndeplinite anumite condiții. 

Cu aceste informații, ar trebui să puteți să vă extindeți propriile aplicații și să oferiți utilizatorilor experiențe mai uimitoare în funcție de locația, activitatea și alte valori utile.

Cod