Cum să recunoașteți activitatea utilizatorilor cu recunoașterea activității

Efectuarea unei contexte cu aplicații este una dintre cele mai bune modalități de a oferi utilizatorilor dvs. servicii utile. Există câteva moduri de a face acest lucru, inclusiv construirea de aplicații care utilizează geofenii și alte servicii de localizare. Acest articol se concentrează pe utilizarea serviciilor Google Play Recunoașterea activității API pentru a determina dacă utilizatorul se execută, mersul pe jos, într-un vehicul, ciclism sau rămase nemișcat.

Știind ce activitate desfășoară utilizatorul vă poate permite să satisfaceți experiența aplicației, de exemplu, întrebând dacă utilizatorul începe să-și exercite astfel încât să puteți urmări acest lucru cu Google Fit sau să împiedicați trimiterea notificărilor atunci când conducătorul auto conduce . Fișierele sursă pentru acest tutorial pot fi găsite pe GitHub.

1. Configurarea proiectului

Primul lucru pe care trebuie să-l faceți este să creați o nouă aplicație Android. Pentru această aplicație de probă, am setat SDK minim la 14 și a creat o valoare inițială goală Activitate. Odată ce aplicația Android Studio a creat aplicația de bază, deschideți build.gradle fișierul și importul serviciilor Play (versiunea 8.4 este cea mai recentă la momentul acestei scrieri) în cadrul dependențe nodul.

compile 'com.google.android.gms: play-services: 8.4.0'

Apoi, creați o nouă clasă, denumiți-o ActivityRecognizedService, și să se extindă IntentService. Când serviciul Google Play returnează activitatea utilizatorului, acesta va fi trimis la aceasta IntentService. Acest lucru vă va permite să efectuați logica aplicației în fundal, pe măsură ce utilizatorul merge despre ziua sa.

clasa publica ActivityRecognizedService extinde IntentService public ActivityRecognizedService () super ("ActivityRecognizedService");  public ActivityRecognizedService (nume șir) super (nume);  @Overire protejată void onHandleIntent (Intent intention) 

Pentru a termina configurarea, deschideți AndroidManifest.xml. Trebuie să declarați ActivityRecognizedService și să includă com.google.android.gms.permission.ACTIVITY_RECOGNITION permisiunea pentru cererea dvs..

            

Acum că ați finalizat structura de bază a aplicației dvs., puteți trece la pasul următor de conectare la serviciile Google Play și solicitarea datelor privind activitatea.

2. Recunoașterea activității solicitante

Pentru a utiliza serviciile Google Play, trebuie mai întâi să vă conectați la acestea. Începeți prin deschidere MainActivity.java și să pună în aplicare ConnectionCallbacks și OnConnectionFailedListener interfețe. De asemenea, trebuie să creați o variabilă de membru a tipului GoogleApiClient să păstrați o referință la clientul API.

public class MainActivity se extinde AppCompatActivity implementează GoogleApiClient.ConnectionCallbacks, GoogleApiClient.OnConnectionFailedListener public GoogleApiClient mApiClient; @Override protejate void onCreate (Bundle savedInstanceState) super.onCreate (savedInstanceState); setContentView (R.layout.activity_main);  @Override public void onConnected (@Nullable Bundle Bundle)  @Overide public void onConnectionSuspended (int i)  @Override public void onConnectionFailed (@NonNull ConnectionResult connectionResult) 

După implementarea interfețelor necesare pentru GoogleApiClient, puteți inițializa clientul și vă puteți conecta la serviciile Google Play în onCreate () solicitând ActivityRecognition.API și asociați ascultătorii dvs. cu GoogleApiClient instanță.

@Override protejate void onCreate (Bundle savedInstanceState) super.onCreate (savedInstanceState); setContentView (R.layout.activity_main); mApiClient = noul GoogleApiClient.Builder (acest) .addApi (ActivityRecognition.API) .addConnectionCallbacks (acest) .addOnConnectionFailedListener (this) .build (); mApiClient.connect (); 

Odata ce GoogleApiClient instanța a conectat, onConnected () se numește. Când se întâmplă acest lucru, trebuie să creați o PendingIntent care merge la IntentService pe care le-ați creat mai devreme, și le transmiteți la ActivityRecognitionApi. De asemenea, trebuie să setați un interval pentru cât de des API ar trebui să verifice activitatea utilizatorului. Pentru această aplicație de probă, folosim o valoare de 3000, sau trei secunde, deși într-o aplicație actuală este posibil să doriți să verificați mai puțin frecvent pentru a economisi energie.

@Override public void onConnected (pachet @Nullable Bundle) Intent intent = Intenție nouă (aceasta, ActivityRecognizedService.class); PendingIntent pendingIntent = PendingIntent.getService (aceasta, 0, intenție, PendingIntent.FLAG_UPDATE_CURRENT); ActivityRecognition.ActivityRecognitionApi.requestActivityUpdates (mApiClient, 3000, în așteptare); 

În acest moment, aplicația dvs. ar trebui să încerce să recunoască activitatea utilizatorului la fiecare trei secunde și să trimită aceste date către ActivityRecognizedService.

3. Manipularea recunoașterii activității

În onHandleIntent () Metodă de ActivityRecognizedService, primul lucru pe care îl faci este să validezi că a primit scop conține date de recunoaștere a activității. Dacă da, atunci puteți extrage ActivityRecognitionResult de la scop pentru a vedea ce activități ar putea funcționa utilizatorul dvs. Puteți prelua o listă a activităților posibile prin apelare getProbableActivities () pe ActivityRecognitionResult obiect.

@Override protejată void onHandleIntent (intent intent) if (ActivityRecognitionResult.hasResult (intent)) ActivityRecognitionResult result = ActivityRecognitionResult.extractResult (intent); handleDetectedActivities (result.getProbableActivities ()); 

Pentru această aplicație de probă, înregistrați pur și simplu fiecare activitate detectată și afișați cât de încrezători sunt serviciile Google Play că utilizatorul efectuează acea activitate prin apelare getConfidence () pe o DetectedActivity instanță. Dacă o încredere este de 75 sau mai mult, atunci este sigur să presupunem că utilizatorul desfășoară acea activitate. Pentru a demonstra acest lucru, afișați și o notificare atunci când aplicația dvs. detectează faptul că utilizatorul merge cu mare încredere.

privat privatDetectedActivities (Lista (pentru activitate detectatăActivități: probableActivities) switch (activity.getType ()) caz DetectedActivity.IN_VEHICLE: Log.e ("ActivityRecogition", "In Vehicle:" + activity.getConfidence ()); pauză;  caz DetectedActivity.ON_BICYCLE: Log.e ("ActivityRecogition", "Pe bicicletă:" + activity.getConfidence ()); pauză;  caz DetectedActivity.ON_FOOT: Log.e ("ActivityRecogition", "Pe picior:" + activity.getConfidence ()); pauză;  caz DetectedActivity.RUNNING: Log.e ("ActivityRecogition", "Running:" + activity.getConfidence ()); pauză;  caz DetectedActivity.STILL: Log.e ("ActivityRecogition", "Still:" + activity.getConfidence ()); pauză;  caz DetectedActivity.TILTING: Log.e ("ActivityRecogition", "Tilting:" + activity.getConfidence ()); pauză;  caz DetectedActivity.WALKING: Log.e ("ActivityRecogition", "Plimbare:" + activity.getConfidence ()); dacă (activity.getConfidence ()> = 75) NotificationCompat.Builder builder = Notificare nouăCompat.Builder (aceasta); builder.setContentText ("Mergi?"); builder.setSmallIcon (R.mipmap.ic_launcher); builder.setContentTitle (getString (R.string.app_name)); NotificationManagerCompat.from (acest) .notify (0, builder.build ());  pauză;  caz DetectedActivity.UNKNOWN: Log.e ("ActivityRecogition", "Unknown:" + activity.getConfidence ()); pauză; 

Dacă rulați această aplicație, mergeți pentru o rulare și apoi conectați-vă dispozitivul la computer, ar trebui să vedeți un jurnal similar cu cel din consola de dezvoltare.

E / ActivitateRecogie: Pe picior: 92 E / ActivitateRecogisie: Activitate: 87 E / ActivitateRecogisie: Pe bicicletă: 8 E / ActivitateRecogisie: Plimbare: 5

Dacă mergeți la o plimbare, ar trebui să primiți o notificare care vă întreabă dacă vă plimbați. Dacă aveți o aplicație de exerciții fizice, aceasta ar fi ocazia perfectă de a furniza utilizatorului dvs. o acțiune care să îi permită să înceapă să urmărească exercițiul.

Concluzie

Serviciile Google Play fac foarte ușor determinarea activității curente a utilizatorului. Acest lucru poate fi incredibil de valoros pentru a face aplicațiile dvs. contextuale și utile pentru utilizatorii dvs., ceea ce este excelent pentru toți cei implicați. Cu doar câteva linii de cod, și tu poți face aplicațiile mai inteligente.

Cod