Google Fit for Android citirea datelor senzorului

Introducere

Google Fit este o platformă care permite dezvoltatorilor să construiască aplicații care se concentrează asupra datelor de fitness ale utilizatorilor. Unul dintre instrumentele pe care le-a oferit Google este Google Fit for Android, care este disponibil ca pachet în serviciile Google Play.

Deși există mai multe API-uri disponibile pentru Google Fit, după cum sa discutat în acest articol de prezentare a Envato Tuts +, acest tutorial se concentrează pe stabilirea și utilizarea Google Fit pentru a citi datele senzorilor pe un dispozitiv Android. Un exemplu de proiect pentru acest tutorial poate fi găsit pe GitHub.

1. Configurarea Consolei pentru dezvoltatori

Pentru a utiliza Google Fit for Android, trebuie să:

  • activați Fitness API în Google Developers Console
  • creaza un Cod client OAuth 2.0
  • conectați la API-ul de fitness în aplicația Android

Această secțiune vă arată cum să configurați aplicația dvs. Android și API-ul de fitness. Puteți începe prin a vizita Google Developers Console. Dacă aveți deja un proiect cu care să lucrați, puteți trece peste următorul pas. Dacă nu, continuați și creați un nou proiect pentru aplicația dvs. Google Fit.

Pasul 1: Creați un proiect

Pentru a crea un nou proiect, faceți clic pe albastru Creați un proiect în colțul din stânga sus al ecranului.

Aceasta vă prezintă un dialog care solicită numele unui proiect. Pentru acest tutorial, am creat un proiect și l-am denumit TutsPlusGoogleFit. Există unele restricții cu privire la ceea ce puteți numi proiectul dvs. Sunt permise numai litere, numere, citate, cratime, spații și semne de exclamație.

Odată ce ai lovit Crea, în colțul din dreapta jos al paginii apare o fereastră de dialog, indicând faptul că proiectul este în curs de creare.

Pasul 2: Activați API-ul Google Fit

Odată cu înființarea proiectului, sunteți îndreptat către proiect Prezentare generală pagină. Cea mai ușoară modalitate de a găsi API-ul Google Fit este căutarea cuvântului cheie "potrivi". Selectați Fitness API din rezultatele care apar.

Clic Activați API-ul pentru a permite să Fitness API.

După ce activați API-ul de fitness, primiți un avertisment care vă informează că trebuie, de asemenea, să creați acreditări pentru a utiliza API-ul Fitness. Din fericire, avertismentul include un buton care ne duce la scrisori de acreditare pagină.

Pasul 3: Creați acreditări

Pe scrisori de acreditare pagina, trebuie să furnizați câteva informații generale despre aplicația dvs. în Credință Expert. Specificați faptul că utilizați Fitness API, că API este apelat de la un Android și că aplicația are nevoie de acces Datele utilizatorului.

Apoi, faceți clic pe Ce acreditare am nevoie? din partea de jos pentru a continua și a crea un ID client OAuth 2.0 pentru aplicația dvs. Android. Aveți nevoie de două informații importante pentru acest pas:

  • semnarea certificatul de amprentă digitală
  • numele pachetului pentru aplicație

Puteți obține amprenta certificatului de semnare deschizând un terminal sau prompt de comandă și navigând la locația certificatului de semnătură al aplicației. Aceasta este fie cheia de eliberare, fie cea implicită debug.keystore certificat pe care îl folosește aplicația Android Studio. Odată ce ați navigat la magazinul de chei, puteți genera SHA1 necesar cu următoarea comandă, unde debug.keystore este numele certificatului de semnare.

keytool -list -v -keystore debug.keystore

Lipiți cheia SHA1 în câmpul SHA1 și introduceți com.tutsplus.googlefit în câmpul cu numele pachetului.

În cele din urmă, trebuie să configurați ecranul de aprobare OAuth 2.0. Acesta este ecranul care este afișat utilizatorului, astfel încât acesta să poată acorda aplicației dvs. permisiunea de a-și folosi datele de fitness. Acest pas presupune ca e-mailul și un nume de produs să fie afișate utilizatorilor. Pentru acest tutorial, am intrat Tuts + Google Fit.

Clic Continua și, în pagina următoare, faceți clic pe Terminat pentru a termina procesul de configurare.

Pasul 4: Instalarea Proiectului Android

Cu proiectul configurat și configurat în Consola pentru dezvoltatori Google, puteți începe să creați un nou proiect Android. Asigurați-vă că numele pachetului se potrivește cu cel pe care l-ați introdus în Google Developer Console și setați aplicația să utilizeze Telefon și Tablet platforme cu o versiune SDK minimă de 14. Nivelul minim al API pentru Google Fit este 9. Creați un  Activitate goală pentru a menține proiectul de bază curat, astfel încât să vă puteți concentra pe API-ul Google Fit în acest tutorial.

După configurarea proiectului, deschideți proiectul build.gradle fișierul și să importați pachetul de fitness din serviciile Google Play adăugând următoarea linie la dependențe nodul.

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

În continuare, deschideți-vă MainActivity.java și adăugați următoarele interfețe:

  • OnDataPointListener
  • GoogleApiClient.ConnectionCallback
  • GoogleApiClient.OnConnectionFailedListener

După ce ați adăugat metodele necesare pentru aceste interfețe, clasa dvs. ar trebui să arate după cum urmează:

public class MainActivity se extinde AppCompatActivity implementează OnDataPointListener, GoogleApiClient.ConnectionCallbacks, GoogleApiClient.OnConnectionFailedListener @Override protejat void onCreate (Bundle savedInstanceState) super.onCreate (savedInstanceState); setContentView (R.layout.activity_main);  @Overide public void onConnected (Bundle bundle)  @Overide public void onConnectionSuspended (int i)  @Overide public void onConnectionFailed (ConnectionResult connectionResult)  @Override public void onDataPoint (DataPoint dataPoint) 

Nu în ultimul rând, creați variabilele membre pe care le veți folosi pentru acest tutorial. Puteți copia următoarele linii în partea de sus a clasei:

statică finală privată int REQUEST_OAUTH = 1; statică finală privată statică AUTH_PENDING = "auth_state_pending"; privat boolean authInProgress = false; private GoogleApiClient mApiClient;

În pasul următor, vă veți conecta la serviciile Google Play și veți învăța cum să accesați datele de fitness ale utilizatorului în cadrul aplicației.

2. Folosind API-ul Fitness

Pasul 1: Conectarea la serviciile Google Play

Cu proiectul creat în aplicațiile Android Studio și în Consola pentru dezvoltatori Google, este timpul să vă aruncați cu capul în API-ul de fitness. În onCreate (), , verificați dacă aplicația dvs. încearcă deja să vă autorizeze împotriva API-ului de fitness. Apoi inițializați GoogleApiClient exemplu prin adăugarea API-ului Fitness Sensors, definind un domeniu de aplicare și înregistrarea apelurilor de apel ale aplicației. Dacă nu solicitați un domeniu de aplicare, aplicația dvs. nu va autoriza împotriva aplicației Fitness Sensors API.

@Override protejate void onCreate (Bundle savedInstanceState) super.onCreate (savedInstanceState); setContentView (R.layout.activity_main); dacă (savedInstanceState! = null) authInProgress = salvatInstanceState.getBoolean (AUTH_PENDING);  mApiClient = nou GoogleApiClient.Builder (acest) .addApi (Fitness.SENSORS_API) .addScope (nou Scop (Scopes.FITNESS_ACTIVITY_READ_WRITE)) .addConnectionCallbacks (acest) .addOnConnectionFailedListener (this) .build (); 

După inițializarea GoogleApiClient de exemplu, trebuie să vă conectați la backend-ul Google. Puteți face acest lucru onStart ().

@Override protejate void onStart () super.onStart (); mApiClient.connect (); 

Prima dată când utilizatorul execută aplicația, conexiunea la Fitness API va eșua, deoarece utilizatorul trebuie să autorizeze aplicația să acceseze datele de fitness. Puteți asculta acest eveniment în onConnectionFailed () și să reacționeze în consecință, verificând dacă autorizația este în curs de desfășurare. Dacă este, sunați startResolutionForResult () astfel încât serviciile Google Play să poată gestiona corect permisiunea utilizatorului de a-și utiliza informațiile.

@Override publică void onConnectionFailed (ConnectionResult connectionResult) if (! AuthInProgress) încercați authInProgress = true; connectionResult.startResolutionForResult (MainActivity.this, REQUEST_OAUTH);  captură (IntentSender.SendIntentException e)  altceva Log.e ("GoogleFit", "authInProgress"); 

Dacă rulați acum aplicația dvs., vi se poate prezenta un dialog care vă solicită să selectați un cont Google pe care să îl utilizați dacă ați utilizat mai multe conturi pe dispozitiv.

Când sistemul de operare știe ce cont să utilizeze, aplicația dvs. prezintă un dialog nou care îi cere utilizatorului să acorde permisiunea aplicației de a citi datele de fitness.

În acest stadiu, utilizatorul acordă fie permisiunea dvs. de utilizare pentru a-și folosi datele, fie închid dialogul, anulând procesul. Puteți asculta ambele evenimente în onActivityResult () și să se ocupe de rezultat. Dacă utilizatorul îți acordă permisiunea de aplicare, aplicația primește o RESULT_OK răspuns și poate încerca apoi să se conecteze la clientul API Google.

@Override protejat void onActivityResult (int requestCode, int resultCode, date intent) if (requestCode == REQUEST_OAUTH) authInProgress = false; dacă (resultCode == RESULT_OK) if (! mApiClient.isConnecting () &&! mApiClient.isConnected ()) mApiClient.connect ();  altfel dacă (resultCode == RESULT_CANCELED) Log.e ("GoogleFit", "RESULT_CANCELED");  altceva Log.e ("GoogleFit", "requestCode NOT request_oauth"); 

Aplicația dvs. trebuie să se poată conecta cu succes la serviciile Google Play. Cu asta, puteți începe să vă concentrați pe API pentru fitness.

Pasul 2: Accesarea datelor pas cu API-ul de fitness

Când ești GoogleApiClient instanța a conectat la Google, onConnected () inversarea apelului este declanșată. În acest apel de apel, trebuie să creați un nou DataSourcesRequest obiect care definește tipul de date de care aplicația dvs. este interesată. Trebuie, de asemenea, să creați un ResultCallback care gestionează ce trebuie să facă aplicația dacă pașii pot fi preluați de pe dispozitiv. Cu obiectele create, apelați Fitness.SensorsApi.findDataSources () pentru a începe căutarea unei surse de date valide.

@Override public void onConnected (Bundle bundle) DataSourcesRequest dataSourceRequest = nou DataSourcesRequest.Builder () .setDataTypes (DataType.TYPE_STEP_COUNT_CUMULATIVE) .setDataSourceTypes (DataSource.TYPE_RAW) .build (); ResultCallback dataSourcesResultCallback = RezultateCallback noi() @Override public void peResult (DataSourcesResult dataSourcesResult) pentru (DataSource dataSource: dataSourcesResult.getDataSources ()) if (DataType.TYPE_STEP_COUNT_CUMULATIVE.equals (dataSource.getDataType ())) registerFitnessDataListener (dataSource, DataType.TYPE_STEP_COUNT_CUMULATIVE); ; Senzori de fitnessApi.findDataSources (mApiClient, dataSourceRequest) .setResultCallback (dataSourcesResultCallback); 

Puteți observa că registerFitnessDataListener () metoda nu există în realitate. Aceasta este o metodă de ajutor care se numește atunci când se găsește sursa de date pentru contorul de pasi, care apoi creează o SensorRequest obiect pentru solicitarea datelor de la senzorul de numărare pas.

În următorul fragment de cod, SensorRequest obiectul încearcă să găsească numărul pasului la fiecare trei secunde. Fitness.SensorApi apoi adaugă cererea cu un nou OnDataPointListener astfel încât, atunci când sunt disponibile noi date, ascultătorul este declanșat. Dacă nu se găsesc date noi, OnDataPointListener nu este declanșată și API-ul de fitness așteaptă încă trei secunde înainte de a verifica din nou.

privat void registerFitnessDataListener (DateSource dataSource, DataType dataType) solicitare SensorRequest = noua SensorRequest.Builder () .setDataSource (dataSource) .setDataType (dataType) .setSamplingRate (3, TimeUnit.SECONDS) .build (); Fitness.SensorsApi.add (mApiClient, cerere, acest lucru) .setResultCallback (new ResultCallback() @Override public void onResult (Status status) dacă (status.isSuccess ()) Log.e ("GoogleFit", "SensorApi adăugat cu succes"); ); 

Când se detectează o modificare a numărului pasului, onDataPoint () este invocată. În această metodă, faceți buclă prin câmpurile din DataPoint parametru și afișați a Paine prajita mesaj cu numele și valoarea câmpului. În acest exemplu, acesta va fi contorul pas. În aplicațiile proprii, ați folosi o logică mai adecvată pentru a vă îndeplini sarcina. Veți observa că Paine prajita comanda este înfășurată într-o runnable care este trecut la runOnUiThread. Acest lucru se datorează faptului că apelul nu este declanșat pe firul principal al interfeței utilizator.

@Override public void peDataPoint (DataPoint dataPoint) pentru (câmp final câmp: dataPoint.getDataType (). GetFields ()) valoare final value = dataPoint.getValue (câmp); RunOnUiThread (noul Runnable () @Override public void run () Toast.makeText (getApplicationContext (), "Câmp:" + field.getName () + "Valoare:" + valoare, Toast.LENGTH_SHORT). ); 

Există încă două lucruri pe care trebuie să le faceți pentru acest eșantion. Primul este deconectat de la SensorApi și serviciile Google Play când le-ați terminat. În acest exemplu, faceți asta când onStop () se numește. Al doilea este stocarea authInProgress valoare care este verificată de onCreate () în onSavedInstanceState ().

@Override protejate void onStop () super.onStop (); Fitness.SensorsApi.remove (mApiClient, acest lucru) .setResultCallback (noul ResultCallback() @Override public void onResult (Stare stare) if (status.isSuccess ()) mApiClient.disconnect (); );  @Override protejat void onSaveInstanceState (Bundle outState) super.onSaveInstanceState (outState); outState.putBoolean (AUTH_PENDING, authInProgress); 

Concluzie

În acest tutorial, ați învățat cum să vă conectați la API-ul de fitness pentru servicii Google Play și să citiți datele senzorului de fitness de pe dispozitivul utilizatorului. Chiar și un lucru la fel de simplu ca pasul de date pentru utilizatorul dvs. se poate dovedi a fi incredibil de valoros pentru aplicații cum ar fi chipurile de ceas Android Wear sau trackerele de țintă. Există zeci de alte tipuri de surse de date pe care le puteți utiliza și multe alte API-uri în Google Fit pentru a face aplicațiile dvs. chiar mai bune.

Cod