Google Fit voor Android sensorgegevens lezen

Invoering

Google Fit is een platform waarmee ontwikkelaars applicaties kunnen bouwen die zijn gericht op gebruikersfitnessgegevens. Een van de hulpmiddelen die Google heeft geboden, is Google Fit voor Android, dat beschikbaar is als pakket in Google Play-services.

Hoewel er veel verschillende API's beschikbaar zijn voor Google Fit, zoals besproken in dit overzichtsartikel van Envato Tuts +, is deze zelfstudie gericht op het instellen en gebruiken van Google Fit om sensorgegevens op een Android-apparaat te lezen. Een voorbeeldproject voor deze tutorial is te vinden op GitHub.

1. De ontwikkelaarsconsole instellen

Als u Google Fit voor Android wilt gebruiken, moet u het volgende doen:

  • schakel het in Fitness API in de Google Developers Console
  • Creëer een OAuth 2.0 client-ID
  • maak verbinding met de Fitness API in je Android-applicatie

In dit gedeelte wordt uitgelegd hoe u uw Android-app en de Fitness-API instelt. U kunt beginnen met een bezoek aan de Google Developers Console. Als je al een project hebt om mee te werken, kun je de volgende stap overslaan. Zo niet, volg dan en maak een nieuw project voor uw Google Fit-toepassing.

Stap 1: maak een project

Als u een nieuw project wilt maken, klikt u op het blauwe Maak een project knop in de linkerbovenhoek van het scherm.

Dit presenteert u een dialoog die om een ​​projectnaam vraagt. Voor deze zelfstudie heb ik een project gemaakt en het genoemd TutsPlusGoogleFit. Er zijn enkele beperkingen aan wat u uw project kunt noemen. Alleen letters, cijfers, aanhalingstekens, koppeltekens, spaties en uitroeptekens zijn toegestaan.

Zodra je geraakt bent creëren, er verschijnt een dialoogvenster in de rechterbenedenhoek van de pagina om aan te geven dat het project wordt gemaakt.

Stap 2: Schakel de Google Fit API in

Wanneer het project is opgezet, wordt u meegenomen naar het project Overzicht pagina. De eenvoudigste manier om de Google Fit API te vinden, is door naar het trefwoord te zoeken "Fit". kiezen Fitness API van de resultaten die verschijnen.

Klik API inschakelen inschakelen Fitness API.

Nadat u de Fitness API hebt ingeschakeld, ontvangt u een waarschuwing die u informeert dat u ook inloggegevens moet maken om de Fitness API te gebruiken. Gelukkig bevat de waarschuwing een knop die ons naar de Geloofsbrieven pagina.

Stap 3: Maak referenties aan

Op de Geloofsbrieven pagina, moet u algemene informatie over uw toepassing in de Wizard Referenties. Geef op dat u de Fitness API, dat de API wordt aangeroepen vanuit een Android applicatie, en dat de applicatie toegang nodig heeft Gebruikersgegevens.

Klik vervolgens op Welke referenties heb ik nodig?? onderaan om door te gaan en een OAuth 2.0-client-ID voor uw Android-toepassing te maken. U hebt voor deze stap twee belangrijke stukjes informatie nodig:

  • signing-certificaat vingerafdruk
  • pakketnaam voor de toepassing

U kunt de ondertekeningscertificaatvingerafdruk verkrijgen door een terminal of opdrachtprompt te openen en te navigeren naar de locatie van het ondertekeningscertificaat van uw toepassing. Dit is uw vrijgavesleutel of de standaardinstelling debug.keystore certificaat dat Android Studio gebruikt. Nadat u naar uw keystore bent genavigeerd, kunt u de benodigde SHA1 genereren met de volgende opdracht, waarbij debug.keystore is de naam van het ondertekeningscertificaat.

keytool -list -v -keystore debug.keystore

Plak de SHA1-sleutel in het SHA1-veld en voer het in com.tutsplus.googlefit in het veld pakketnaam.

Ten slotte moet u het toestemmingsscherm van OAuth 2.0 configureren. Dit is het scherm dat voor de gebruiker wordt weergegeven, zodat ze uw app toestemming kunnen geven om hun fitnessgegevens te gebruiken. Voor deze stap moeten uw e-mail en een productnaam aan gebruikers worden getoond. Voor deze zelfstudie ben ik begonnen Tuts + Google Fit.

Klik Doorgaan met en klik op de volgende pagina op Gedaan om het installatieproces te voltooien.

Stap 4: Android Project Setup

Als uw project is ingesteld en geconfigureerd in de Google-ontwikkelaarsconsole, kunt u beginnen met het maken van een nieuw Android-project. Zorg ervoor dat de pakketnaam overeenkomt met de naam die u hebt ingevoerd in de Google Developer Console en stel de applicatie in om de te gebruiken Telefoon en tablet platforms met een minimale SDK-versie van 14. Het minimale API-niveau voor Google Fit is 9. Maak een  Lege activiteit om het basisproject schoon te houden, zodat u zich in deze zelfstudie kunt concentreren op de Google Fit API.

Open het project na het opzetten van het project build.gradle bestand en importeer het fitnesspakket van Google Play Services door de volgende regel toe te voegen aan de afhankelijkheden knooppunt.

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

Open vervolgens MainActivity.java en voeg de volgende interfaces toe:

  • OnDataPointListener
  • GoogleApiClient.ConnectionCallback
  • GoogleApiClient.OnConnectionFailedListener

Nadat u de vereiste methoden voor deze interfaces hebt toegevoegd, moet uw klasse er als volgt uitzien:

openbare klasse MainActivity breidt toepassing uit AppCompatActivity OnDataPointListener, GoogleApiClient.ConnectionCallbacks, GoogleApiClient.OnConnectionFailedListener @Override protected void onCreate (Bundle savedInstanceState) super.onCreate (savedInstanceState); setContentView (R.layout.activity_main);  @Override public void onConnected (Bundelbundel)  @Override openbare ongeldig onConnectionSuspended (int i)  @Override openbare ongeldig onConnectionFailed (ConnectionResult connectionResult)  @Override openbare ongeldig opDataPoint (DataPoint-gegevenspunt) 

Last but not least, maak de lidvariabelen die u voor deze zelfstudie zult gebruiken. U kunt de volgende regels naar de top van de klas kopiëren:

privé statische laatste int REQUEST_OAUTH = 1; private static final String AUTH_PENDING = "auth_state_pending"; private boolean authInProgress = false; privé GoogleApiClient mApiClient;

In de volgende stap maakt u verbinding met Google Play-services en leert u hoe u toegang krijgt tot de fitnessgegevens van de gebruiker in uw app.

2. De fitness-API gebruiken

Stap 1: Verbinding maken met Google Play-services

Met het project ingesteld in Android Studio en de Google Developer Console, is het tijd om een ​​duik te nemen in de Fitness API. In de onCreate (), methode, controleert u of uw app al probeert te autoriseren tegen de Fitness API. Vervolgens initialiseert u de GoogleApiClient bijvoorbeeld door de Fitness Sensors API toe te voegen, een scope te definiëren en de applicatie-callbacks te registreren. Als u geen scope aanvraagt, kan uw app geen toestemming geven voor de Fitness Sensors API.

@Override protected void onCreate (Bundle savedInstanceState) super.onCreate (savedInstanceState); setContentView (R.layout.activity_main); if (savedInstanceState! = null) authInProgress = savedInstanceState.getBoolean (AUTH_PENDING);  mApiClient = nieuwe GoogleApiClient.Builder (dit) .addApi (Fitness.SENSORS_API) .addScope (nieuwe scope (Scopes.FITNESS_ACTIVITY_READ_WRITE)) .addConnectionCallbacks (this) .addOnConnectionFailedListener (this) .build (); 

Na initialisatie van de GoogleApiClient U moet bijvoorbeeld verbinding maken met de back-end van Google. U kunt dit doen in onStart ().

@Override beschermde leegte onStart () super.onStart (); mApiClient.connect (); 

De eerste keer dat de gebruiker de toepassing uitvoert, mislukt de verbinding met de Fitness API omdat de gebruiker uw app moet autoriseren voor toegang tot hun fitnessgegevens. Je kunt binnen deze gebeurtenis luisteren naar deze gebeurtenis onConnectionFailed () en dienovereenkomstig reageren door na te gaan of de autorisatie aan de gang is. Als het zo is, bel startResolutionForResult () zodat Google Play-services de gebruiker die toestemming verleent om hun informatie te gebruiken, op de juiste manier kan gebruiken.

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

Als u uw toepassing nu uitvoert, krijgt u mogelijk een dialoogvenster waarin u wordt gevraagd een Google-account te selecteren als u meerdere accounts op uw apparaat hebt gebruikt.

Wanneer het besturingssysteem weet welk account moet worden gebruikt, presenteert uw toepassing een nieuw dialoogvenster waarin de gebruiker wordt gevraagd toestemming te verlenen aan de app om fitnessgegevens te lezen.

In dit stadium verleent de gebruiker uw app toestemming om zijn of haar gegevens te gebruiken of sluiten ze het dialoogvenster en annuleren ze het proces. Je kunt binnen beide gebeurtenissen luisteren onActivityResult () en behandel het resultaat. Als de gebruiker uw app toestemming verleent, ontvangt uw app een RESULT_OK antwoord en kan vervolgens proberen verbinding te maken met de Google API-client.

@Override beschermde leegte onActivityResult (int requestCode, int resultCode, Intent-gegevens) if (requestCode == REQUEST_OAUTH) authInProgress = false; if (resultCode == RESULT_OK) if (! mApiClient.isConnecting () &&! mApiClient.isConnected ()) mApiClient.connect ();  else if (resultCode == RESULT_CANCELED) Log.e ("GoogleFit", "RESULT_CANCELED");  else Log.e ("GoogleFit", "requestCode NOT request_oauth"); 

Uw app zou nu in staat moeten zijn om verbinding te maken met Google Play-services. Met dat uit de weg, kunt u beginnen met het focussen op de Fitness API.

Stap 2: Toegang krijgen tot stapgegevens met de Fitness API

Wanneer je GoogleApiClient instantie heeft verbinding met Google, de onConnected () terugbellen wordt geactiveerd. In deze callback moet u een nieuwe maken DataSourcesRequest object dat het type gegevens definieert waarin uw toepassing is geïnteresseerd. U moet ook een ResultCallback die verwerkt wat de app moet doen als stappen van het apparaat kunnen worden opgehaald. Met de gemaakte objecten belt u Fitness.SensorsApi.findDataSources () om te beginnen met zoeken naar een geldige stapgegevensbron.

@Override public void onConnected (bundelbundel) DataSourcesRequest dataSourceRequest = new DataSourcesRequest.Builder () .setDataTypes (DataType.TYPE_STEP_COUNT_CUMULATIVE) .setDataSourceTypes (DataSource.TYPE_RAW) .build (); ResultCallback dataSourcesResultCallback = new ResultCallback() @Oeverride public unfid onResult (DataSourceResult dataSourcesResult) for (DataSource-gegevensbron: 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); 

Mogelijk merkt u dat de registerFitnessDataListener () methode bestaat niet echt. Dit is een hulpmethode die wordt aangeroepen wanneer de gegevensbron voor de stappenteller wordt gevonden, die vervolgens een SensorRequest object voor het opvragen van gegevens van de stappentetector.

In het volgende codefragment, de SensorRequest object probeert de stapstap om de drie seconden te vinden. De Fitness.SensorApi voegt vervolgens het verzoek met een nieuw toe OnDataPointListener zodat wanneer nieuwe gegevens beschikbaar zijn, de luisteraar wordt geactiveerd. Als er geen nieuwe gegevens worden gevonden, de OnDataPointListener is niet geactiveerd en de Fitness API wacht nog eens drie seconden voordat hij opnieuw controleert.

private void registerFitnessDataListener (DataSource dataSource, DataType dataType) SensorRequest request = nieuwe SensorRequest.Builder () .setDataSource (dataSource) .setDataType (dataType) .setSamplingRate (3, TimeUnit.SECONDS). build (); Fitness.SensorsApi.add (mApiClient, request, this) .setResultCallback (new ResultCallback() @Override public void onResult (Status status) if (status.isSuccess ()) Log.e ("GoogleFit", "SensorApi succesvol toegevoegd"); ); 

Wanneer een verandering in het aantal stappen wordt gedetecteerd, onDataPoint () wordt aangeroepen. In deze methode doorloopt u de velden in de Data punt parameter en weergave a Geroosterd brood bericht met de veldnaam en waarde. In dit voorbeeld is dat de stappenteller. In uw eigen apps zou u meer geschikte logica gebruiken om uw taak uit te voeren. Je zult merken dat het Geroosterd brood opdracht is ingepakt in a uitvoerbare dat is doorgegeven aan runOnUiThread. Dit komt omdat de callback niet wordt geactiveerd op de hoofd UI-thread.

@Override public void onDataPoint (DataPoint dataPoint) for (laatste veldveld: dataPoint.getDataType (). GetFields ()) final Waarde waarde = dataPoint.getValue (veld); runOnUiThread (nieuw Runnable () @Override public void run () Toast.makeText (getApplicationContext (), "Field:" + field.getName () + "Value:" + value, Toast.LENGTH_SHORT) .show (); ); 

Er zijn nog twee dingen die u voor deze steekproef moet doen. De eerste is het loskoppelen van de SensorApi en Google Play-services wanneer u klaar bent met het gebruik ervan. In dit voorbeeld doet u dat wanneer onStop () wordt genoemd. De tweede is het opslaan van de authInProgress waarde die is gecontroleerd door onCreate () in onSavedInstanceState ().

@Override beschermde leegte onStop () super.onStop (); Fitness.SensorsApi.remove (mApiClient, this) .setResultCallback (new ResultCallback() @Override public void onResult (Status status) if (status.isSuccess ()) mApiClient.disconnect (); );  @Override beschermde leegte onSaveInstanceState (bundel outState) super.onSaveInstanceState (outState); outState.putBoolean (AUTH_PENDING, authInProgress); 

Conclusie

In deze zelfstudie hebt u geleerd hoe u verbinding kunt maken met de Google Fitness-API voor Google Play-services en fitness-sensorgegevens kunt lezen van het apparaat van de gebruiker. Zelfs iets eenvoudigs als stapgegevens voor uw gebruiker kunnen ongelooflijk waardevol blijken te zijn voor toepassingen zoals Android Wear-wijzerplaten of doeltrackers. Er zijn tientallen andere typen gegevensbronnen die u kunt gebruiken en vele andere API's in Google Fit om uw apps nog beter te maken.