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.
Mens det er mange forskjellige APIer tilgjengelig for Google Fit, som diskutert i denne Envato Tuts + oversiktartikkelen, fokuserer denne opplæringen på å bruke Google Fit til å lage abonnement med lavt strømbasert bakgrunn for sensordata. Vi undersøker hvordan du kan utnytte Google Play Services til å lagre treningsdata slik at den kan nås på et senere tidspunkt.
Innspillings-API skiller seg fra Sensor-API-en fordi live-sensordata ikke leveres til opptaksprogrammet, men det blir heller lagret data på nettet for å lagre en oversikt over brukeraktivitet. Denne opplæringen inneholder et prøveprosjekt, som du kan laste ned fra GitHub.
For å bruke Google Fit må du opprette en OAuth 2.0 klient-ID og registrere programmet ditt gjennom Google Developer Console. Du finner en detaljert forklaring på hvordan du konfigurerer Google Developer Console i min veiledning om Google Fit Sensors API.
Når du har konfigurert søknaden din for godkjenning i Google Developer Console, bruker du pakkenavnet du registrerte for å opprette et nytt Android-program med et minimum SDK på 14 og en tom Aktivitet
.
Med basen Android app opprettet, åpner du build.gradle fil og inkluder Google Play Services under avhengighetsnoden og synkroniser appen din.
kompilere 'com.google.android.gms: play-services-fitness: 8.4.0'
Du bør nå kunne inkludere de nødvendige Google Play-tjenesteklassene i søknaden din. Før vi dykker inn i Java-koden for denne opplæringen, åpner du activity_main.xml og endre den slik at den inneholder to Knapp
elementer som vil bli brukt til å demonstrere noen av funksjonene til Recording API.
Når appen din kjøres, ser brukergrensesnittet ut som under bildet.
For å fullføre oppsettet av prosjektet, åpne MainActivity.java og implementer følgende tilbakekallinger og deres nødvendige metoder:
GoogleApiClient.ConnectionCallbacks
GoogleAPiClient.OnConnectionFailedListener
View.OnClickListener
Du må også legge til medlemsvariablene for klassen din, som vist nedenfor.
offentlig klasse MainActivity utvider AppCompatActivity implementerer GoogleApiClient.ConnectionCallbacks, GoogleApiClient.OnConnectionFailedListener, View.OnClickListener Private Button mCancelSubscriptionsBtn; privat knapp mShowSubscriptionsBtn; privat resultCallbackmSubscribeResultCallback; privat resultCallback mCancelSubscriptionResultCallback; privat resultCallback mListSubscriptionsResultCallback; privat GoogleApiClient mGoogleApiClient; @Override protected void onCreate (Bundle savedInstanceState) super.onCreate (savedInstanceState); setContentView (R.layout.activity_main); @Override public void onConnected (@Nullable Bundle bundle) Log.e ("RecordingAPI", "onConnected"); @Override public void onConnectionSuspended (int i) Log.e ("RecordingAPI", "onConnectionSuspended"); @Override public void onConnectionFailed (@NonNull ConnectionResult connectionResult) Log.e ("RecordingAPI", "onConnectionFailed"); @Override public void onClick (Vis v)
Før du kan begynne å bruke tilbakeringinger og synspunkter som du definerte ovenfor, må du initialisere dem. Vi gjør dette ved å opprette to hjelpemetoder, en for å initialisere visninger og en for å initialisere tilbakeringingene som blir kalt inn onCreate ()
.
De initViews ()
metoden peker på Knapp
objekter til de definerte elementene i Activity.xml og setter en OnClickListener
for hver knapp.
@Override protected void onCreate (Bundle savedInstanceState) super.onCreate (savedInstanceState); setContentView (R.layout.activity_main); initViews (); initCallbacks (); private void initViews () mCancelSubscriptionsBtn = (Button) findViewById (R.id.btn_cancel_subscriptions); mShowSubscriptionsBtn = (Button) findViewById (R.id.btn_show_subscriptions); mCancelSubscriptionsBtn.setOnClickListener (this); mShowSubscriptionsBtn.setOnClickListener (this);
I initCallbacks ()
, ting blir litt mer interessant. Hver tilbakeringing brukes til en spesifikk asynkron drift av opptaksprogrammet. Som deres navn innebærer, mSubscribeResultCallback
kalles når du først legger til et abonnement for en sensor, mCancelSubscriptionResultCallback
kalles når du avbryter abonnementet, og mListSubscriptionResultCallback
brukes når du ber om en liste over alle abonnementer.
I følgende kodestykke logger de to tilbakeringingene knyttet til å starte og stoppe et abonnement bare en suksess eller feil. mListSubscriptionResultCallback
mottar en liste over abonnementer og logger ut informasjon om hver av dem ved å få Data-type
og deretter hver Felt
knyttet til abonnementet.
private void initCallbacks () mSubscribeResultCallback = new ResultCallback() @Overvrid offentlig tomgang onResult (@NonNull Status status) if (status.isSuccess ()) if (status.getStatusCode () == FitnessStatusCodes.SUCCESS_ALREADY_SUBSCRIBED) Log.e ("RecordingAPI", "Already subscribed to innspillings-APIen "); else Log.e ("RecordingAPI", "Subscribed to Recording API"); ; mCancelSubscriptionResultCallback = ny ResultCallback () @Override public void onResult (@NonNull Status status) if (status.isSuccess ()) Log.e ("RecordingAPI", "Canceled subscriptions!"); else // Abonnement ikke fjernet Log.e ("RecordingAPI", "Mislyktes å avbryte abonnementer"); ; mListSubscriptionsResultCallback = ny ResultCallback () @Overtrid offentlig tomgang påResultat (@NonNull ListeSubscriptionsResultatlisteSubscriptionsResult) for (Abonnement abonnement: listSubscriptionsResult.getSubscriptions ()) DataType dataType = subscription.getDataType (); Log.e ("RecordingAPI", dataType.getName ()); for (Feltfelt: dataType.getFields ()) Log.e ("RecordingAPI", field.toString ()); ;
Nå som du har det generelle rammeverket for samplingsprogrammet ditt, er det på tide å pakke opp alt ved å koble til Google Play Services og be om abonnementer..
I onCreate ()
, Du kan initialisere og koble til Google Play-tjenester ved å erklære at du bruker Fitness.RECORDING_API
, legger til et omfang for å lese treningsaktivitetsdata, og angi at det automatisk kobles til / kobles fra gjennom programmets livssyklus.
mGoogleApiClient = ny GoogleApiClient.Builder (dette) .addApi (Fitness.RECORDING_API) .addScope (nytt område (Scopes.FITNESS_ACTIVITY_READ)) .addConnectionCallbacks (dette) .enableAutoManage (dette, 0, dette) .build ();
Når som helst etter GoogleApiClient
har koblet til, kan du be om et abonnement. For denne opplæringen abonnerer vi på onConnected ()
. Følgende utdrag viser hvordan du starter et abonnement for endringer i brukerens trinntelling, men du kan få tilgang til alle sensorer som Google Fit støtter.
Hvis et abonnement allerede kjører på grunn av en tidligere handling, mottar tilbakeringingen en statuskode på FitnessStatusCodes.SUCCESS_ALREADY_SUBSCRIBED
.
@Override public void onConnected (@Nullable Bundle bundle) Fitness.RecordingApi.subscribe (mGoogleApiClient, DataType.TYPE_STEP_COUNT_DELTA) .setResultCallback (mSubscribeResultCallback);
Det kan noen ganger være nyttig å be om en liste over abonnementer. Tidligere skapte du to knapper for disse operasjonene. I ved trykk()
Metode, du sjekker hvilken knapp som ble tappet og utfører den tilsvarende handlingen.
@Override public void onClick (Vis v) switch (v.getId ()) tilfelle R.id.btn_cancel_subscriptions: cancelSubscriptions (); gå i stykker; tilfelle R.id.btn_show_subscriptions: showSubscriptions (); gå i stykker;
Hvis showSubscriptions ()
kalles, da søker applikasjonen en liste over abonnementer som er knyttet til innspillings-APIen.
privat ugyldig visningSubscriptions () Fitness.RecordingApi.listSubscriptions (mGoogleApiClient) .setResultCallback (mListSubscriptionsResultCallback);
Dette forårsaker mListSubscriptionsResultCallback
å logge ut alle de tilkoblede abonnementene. Resultatet ser noe ut som dette:
... /com.tutsplus.googlefitrecordingapi E / RecordingAPI: com.google.step_count.delta ... /com.tutsplus.googlefitrecordingapi E / RecordingAPI: trinn (i)
Avbryte et abonnement er enkelt som du kan se nedenfor.
privat ugyldig avbestillingSubscriptions () Fitness.RecordingApi.unsubscribe (mGoogleApiClient, DataType.TYPE_STEP_COUNT_DELTA) .setResultCallback (mCancelSubscriptionResultCallback);
Du bør nå ha en grunnleggende forståelse av hvordan du kobler til Google Fit fra en Android-app og jobber med innspillings-APIen. Selv om dette ikke ser ut som mye akkurat nå, er det bane veien for deg å lagre informasjon om brukerens fysiske aktiviteter slik at de kan nås av andre Google Fit-APIer i søknaden din.