Google Fit for Android Lese sensordata

Introduksjon

Google Fit er en plattform som gjør det mulig for utviklere å bygge applikasjoner som er fokusert på brukerens treningsdata. Et av verktøyene Google har oppgitt, er Google Fit for Android, som er tilgjengelig som en pakke i Google Play Services.

Selv om det er mange forskjellige APIer tilgjengelig for Google Fit, som diskutert i denne Envato Tuts + oversiktartikkelen, fokuserer denne opplæringen på at du konfigurerer og bruker Google Fit til å lese sensordata på en Android-enhet. Et prøveprosjekt for denne opplæringen finner du på GitHub.

1. Sette opp utviklerkonsollen

For å kunne bruke Google Fit for Android må du:

  • aktivere Fitness API i Google Developers Console
  • opprett en OAuth 2.0 klient ID
  • Koble til Fitness API i Android-applikasjonen din

Denne delen viser hvordan du konfigurerer Android-applikasjonen og Fitness API. Du kan starte ved å besøke Google Developers Console. Hvis du allerede har et prosjekt å jobbe med, kan du hoppe over neste trinn. Hvis ikke, følg deretter med og opprett et nytt prosjekt for Google Fit-programmet.

Trinn 1: Opprett et prosjekt

For å opprette et nytt prosjekt, klikk på det blå Opprett prosjekt knappen øverst til venstre på skjermen.

Dette gir deg en dialog som ber om et prosjektnavn. For denne opplæringen har jeg opprettet et prosjekt og kalt det TutsPlusGoogleFit. Det er noen begrensninger på hva du kan nevne prosjektet ditt. Bare bokstaver, tall, sitater, bindestreker, mellomrom og utropstegn er tillatt.

Når du treffer Skape, en dialogboks vises nederst til høyre på siden, som indikerer at prosjektet blir opprettet.

Trinn 2: Aktiver Google Fit API

Med prosjektet satt opp, blir du tatt til prosjektet Oversikt side. Den enkleste måten å finne Google Fit API, er å søke etter søkeordet "passe". Å velge Fitness API fra resultatene som vises.

Klikk Aktiver API å aktivere til Fitness API.

Etter at du har aktivert Fitness API, får du en advarsel som informerer deg om at du også må opprette legitimasjon for å bruke Fitness API. Heldigvis inneholder advarselen en knapp som tar oss til legitimasjon side.

Trinn 3: Opprett legitimasjon

På legitimasjon side, må du gi noen generell informasjon om søknaden din i Legitimasjonsveiviseren. Angi at du bruker Fitness API, at API kalles fra en Android søknad, og at søknaden trenger tilgang til Brukerdata.

Deretter klikker du Hvilke legitimasjon trenger jeg? nederst for å fortsette og opprett en OAuth 2.0-klient-ID for din Android-applikasjon. Du trenger to viktige opplysninger om dette trinnet:

  • signering-sertifikat fingeravtrykk
  • pakke navn for søknaden

Du kan få signeringsbeviset fingeravtrykk ved å åpne en terminal eller kommandoprompt, og navigere til plasseringen av søknadens signeringssertifikat. Dette er enten utgivelsesnøkkelen eller standardinnstillingen debug.keystore sertifikat som Android Studio bruker. Når du har navigert til nøkkelbutikken din, kan du generere den nødvendige SHA1 med følgende kommando, hvor debug.keystore er navnet på signeringsbeviset.

keytool -list -v -keystore debug.keystore

Lim inn SHA1-tasten i SHA1-feltet og skriv inn com.tutsplus.googlefit inn i pakkenavn-feltet.

Til slutt må du konfigurere OAuth 2.0-samtykkeskjermen. Dette er skjermen som vises til brukeren, slik at de kan gi appen din tillatelse til å bruke treningsdataene sine. Dette trinnet krever at e-postadressen din og et produktnavn skal vises til brukerne. For denne opplæringen har jeg skrevet inn Tuts + Google Fit.

Klikk Fortsette og på neste side klikker du Ferdig for å fullføre installasjonsprosessen.

Trinn 4: Android Prosjektoppsett

Med prosjektet ditt konfigurert og konfigurert i Google Developer Console, kan du begynne å lage et nytt Android-prosjekt. Pass på at pakkenavnet samsvarer med det du skrev inn i Google Developer Console og sett programmet til å bruke Telefon og Tablet plattformer med en minimum SDK-versjon på 14. Minimum API-nivå for Google Fit er 9. Opprett en  Tom aktivitet for å holde grunnprosjektet rent slik at du kan fokusere på Google Fit API i denne opplæringen.

Etter opprettelsen av prosjektet, åpne prosjektet build.gradle fil og importer treningspakken fra Google Play Services ved å legge til følgende linje i avhengig node.

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

Deretter åpne MainActivity.java og legg til følgende grensesnitt:

  • OnDataPointListener
  • GoogleApiClient.ConnectionCallback
  • GoogleApiClient.OnConnectionFailedListener

Når du har lagt til de nødvendige metodene for disse grensesnittene, bør klassen din se ut som følgende:

offentlig klasse MainActivity utvider AppCompatActivity implementerer OnDataPointListener, GoogleApiClient.ConnectionCallbacks, GoogleApiClient.OnConnectionFailedListener @Override protected void onCreate (Bundle savedInstanceState) super.onCreate (savedInstanceState); setContentView (R.layout.activity_main);  @Override public void onConnectionFailed (ConnectionResult connectionResult)  @Override public void onDataPoint (DataPoint dataPoint) 

Sist men ikke minst, opprett medlemsvariablene du vil bruke til denne opplæringen. Du kan kopiere følgende linjer til toppen av klassen:

privat statisk slutt int REQUEST_OAUTH = 1; privat statisk endelig streng AUTH_PENDING = "auth_state_pending"; privat booleansk authInProgress = false; privat GoogleApiClient mApiClient;

I neste trinn kobler du til Google Play Services og lærer deg hvordan du får tilgang til brukerens treningsdata i appen din.

2. Bruk Fitness API

Trinn 1: Koble til Google Play-tjenester

Med prosjektet satt opp i Android Studio og Google Developer Console, er det på tide å dykke inn i Fitness API. I onCreate (), Metode, du kontrollerer om appen din allerede forsøker å autorisere mot Fitness API. Derefter initialiserer du GoogleApiClient eksempel ved å legge til treningssensor API, definere et omfang, og registrere søknad tilbakeringinger. Hvis du ikke ber om et omfang, mislykkes appen din til å godkjenne API for treningssensorer.

@Override protected void onCreate (Bundle savedInstanceState) super.onCreate (savedInstanceState); setContentView (R.layout.activity_main); hvis (savedInstanceState! = null) authInProgress = savedInstanceState.getBoolean (AUTH_PENDING);  mApiClient = ny GoogleApiClient.Builder (dette) .addApi (Fitness.SENSORS_API) .addScope (nytt område (Scopes.FITNESS_ACTIVITY_READ_WRITE)) .addConnectionCallbacks (dette) .addOnConnectionFailedListener (this) .build (); 

Etter initialisering av GoogleApiClient For eksempel, du må gjøre det koble til Googles backend. Du kan gjøre dette i onStart ().

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

Første gang brukeren kjører programmet, vil forbindelsen til Fitness API mislykkes fordi brukeren må godkjenne appen din for å få tilgang til treningsdataene sine. Du kan lytte etter denne hendelsen i onConnectionFailed () og reagerer deretter ved å sjekke for å se om autorisasjon er i gang. Hvis det er, ring startResolutionForResult () slik at Google Play Services kan håndtere brukeren som gir tillatelse til å bruke informasjonen.

@Override public void onConnectionFailed (ConnectionResult connectionResult) if (! AuthInProgress) prøv authInProgress = true; connectionResult.startResolutionForResult (MainActivity.this, REQUEST_OAUTH);  fangst (IntentSender.SendIntentException e)  else Log.e ("GoogleFit", "authInProgress"); 

Hvis du kjører programmet nå, kan du bli presentert med en dialogboks som ber deg om å velge en Google-konto som skal brukes hvis du har brukt flere kontoer på enheten din.

Når operativsystemet vet hvilken konto som skal brukes, presenterer søknaden en ny dialog som ber brukeren å gi tillatelse til appen til å lese treningsdata.

På dette stadiet gir brukeren enten søknaden din tillatelse til å bruke dataene sine eller de lukker dialogboksen, avbryter prosessen. Du kan lytte til begge hendelsene i onActivityResult () og håndter resultatet. Hvis brukeren gir din tillatelse, får appen din en RESULT_OK svar, og det kan deretter forsøke å koble til Google API-klienten.

@Override protected void onActivityResult (int requestCode, int resultCode, Intent data) hvis (requestCode == REQUEST_OAUTH) authInProgress = false; hvis (resultCode == RESULT_OK) hvis (! mApiClient.isConnecting () &&! mApiClient.isConnected ()) mApiClient.connect ();  annet hvis (resultCode == RESULT_CANCELED) Log.e ("GoogleFit", "RESULT_CANCELED");  else Log.e ("GoogleFit", "requestCode NOT request_oauth"); 

Din søknad skal nå kunne kobles til Google Play Services. Med det ute av veien, kan du begynne å fokusere på Fitness API.

Trinn 2: Få tilgang til trinndata med Fitness API

Når din GoogleApiClient eksempel har koblet til Google, onConnected () tilbakeringing utløses. I denne tilbakeringingen må du opprette en ny DataSourcesRequest objekt som definerer typen data søknaden din er interessert i. Du må også opprette en ResultCallback som håndterer hva appen skal gjøre hvis trinnene kan hentes fra enheten. Med objektene opprettet, ring Fitness.SensorsApi.findDataSources () for å begynne å søke etter en gyldig datakilde for trinn.

@Override public void onConnected (Bundle bundle) DataSourcesRequest dataSourceRequest = nye DataSourcesRequest.Builder () .setDataTypes (DataType.TYPE_STEP_COUNT_CUMULATIVE) .setDataSourceTypes (DataSource.TYPE_RAW) .build (); ResultCallback dataSourcesResultCallback = ny ResultCallback() @Override offentlig tomrum påResultat (DataSourcesResult dataSourcesResult) for (DataSource dataSource: dataSourcesResult.getDataSources ()) if (DataType.TYPE_STEP_COUNT_CUMULATIVE.equals (dataSource.getDataType ())) registerFitnessDataListener (dataSource, DataType.TYPE_STEP_COUNT_CUMULATIVE); ; Fitness.SensorsApi.findDataSources (mApiClient, dataSourceRequest) .setResultCallback (dataSourcesResultCallback); 

Du kan legge merke til at registerFitnessDataListener () metode eksisterer ikke egentlig. Dette er en hjelpemetode som kalles når datakilden for trinntelleren er funnet, som da oppretter en SensorRequest objekt for å be om data fra trinnteller-sensoren.

I følgende kodestykke, er SensorRequest objekt forsøk på å finne trinntellingen hvert tredje sekund. De Fitness.SensorApi Deretter legger du til forespørselen med en ny OnDataPointListener slik at når nye data er tilgjengelige utløses lytteren. Hvis ingen nye data er funnet, vil OnDataPointListener Utløses ikke og Fitness API venter ytterligere tre sekunder før du sjekker igjen.

private void registerFitnessDataListener (DataSource dataSource, DataType dataType) SensorRequest request = ny SensorRequest.Builder () .setDataSource (dataSource) .setDataType (dataType) .setSamplingRate (3, TimeUnit.SECONDS) .build (); Fitness.SensorsApi.add (mApiClient, forespørsel, dette) .setResultCallback (nytt resultatCallback() @Overtrid offentlig tomgang onResult (Status status) hvis (status.isSuccess ()) Log.e ("GoogleFit", "SensorApi ble lagt til"); ); 

Når en endring i trinntellingen blir oppdaget, onDataPoint () er påkalt. I denne metoden går du gjennom feltene i Datapunkt parameter og vis a Skål melding med feltnavn og verdi. I dette eksemplet vil det være skrittelleren. I dine egne apper vil du bruke mer hensiktsmessig logikk for å utføre oppgaven din. Du vil legge merke til at Skål kommandoen er innpakket i a kjørbart som er sendt til runOnUiThread. Dette skyldes at tilbakeringingen ikke utløses på hovedbruddstråden.

@Override public void onDataPoint (DataPoint dataPoint) for (endelig feltfelt: dataPoint.getDataType (). GetFields ()) endelig verdi verdi = dataPoint.getValue (felt); runOnUiThread (new Runnable () @Override public void run () Toast.makeText (getApplicationContext (), "Field:" + field.getName () + "Verdi:" + verdi, Toast.LENGTH_SHORT) .show ); 

Det er to ting du må gjøre for denne prøven. Den første er frakobling fra SensorApi og Google Play Services når du er ferdig med å bruke dem. I dette eksemplet gjør du det når onStop () er kalt. Den andre lagrer authInProgress verdien som er merket av onCreate () i onSavedInstanceState ().

@Override protected void onStop () super.onStop (); Fitness.SensorsApi.remove (mApiClient, dette) .setResultCallback (nytt resultatCallback() @Overtrid offentlig tomgang onResult (Status status) hvis (status.isSuccess ()) mApiClient.disconnect (); );  @Override protected void onSaveInstanceState (Bundle outState) super.onSaveInstanceState (outState); outState.putBoolean (AUTH_PENDING, authInProgress); 

Konklusjon

I denne veiledningen har du lært hvordan du kobler til Google Play Services Fitness API og leser treningssensordata fra brukerens enhet. Selv noe som er så enkelt som trinndata for brukeren din, kan vise seg å være utrolig verdifull for applikasjoner som Android Wear watch-ansikter eller målsporere. Det finnes dusinvis av andre typer datakilder du kan bruke, og mange andre APIer i Google Fit for å gjøre appene dine enda bedre.