Google Fit für Android Sensordaten lesen

Einführung

Google Fit ist eine Plattform, mit der Entwickler Anwendungen erstellen können, die sich auf Daten zur Benutzerfitness konzentrieren. Eines der von Google bereitgestellten Tools ist Google Fit für Android, das als Paket in den Google Play Services verfügbar ist.

Es gibt zwar viele verschiedene APIs für Google Fit, wie in diesem Envato Tuts + -Übersetzungsartikel beschrieben, jedoch konzentriert sich dieses Tutorial auf die Einrichtung und Verwendung von Google Fit, um Sensordaten auf einem Android-Gerät zu lesen. Ein Beispielprojekt für dieses Tutorial finden Sie auf GitHub.

1. Einrichten der Entwicklerkonsole

Um Google Fit für Android verwenden zu können, müssen Sie:

  • aktivieren Sie die Fitness-API in dem Google Developers Console
  • Erstelle ein OAuth 2.0-Client-ID
  • Verbinden Sie sich mit der Fitness-API in Ihrer Android-Anwendung

In diesem Abschnitt erfahren Sie, wie Sie Ihre Android-Anwendung und die Fitness-API einrichten. Sie können mit dem Besuch der Google Developers Console. Wenn Sie bereits ein Projekt haben, mit dem Sie arbeiten können, können Sie den nächsten Schritt überspringen. Wenn nicht, folgen Sie den Anweisungen und erstellen Sie ein neues Projekt für Ihre Google Fit-Anwendung.

Schritt 1: Erstellen Sie ein Projekt

Um ein neues Projekt zu erstellen, klicken Sie auf das blaue Projekt erstellen Schaltfläche in der oberen linken Ecke des Bildschirms.

Daraufhin wird ein Dialogfeld angezeigt, in dem Sie nach einem Projektnamen gefragt werden. Für dieses Tutorial habe ich ein Projekt erstellt und benannt TutsPlusGoogleFit. Es gibt einige Einschränkungen, wie Sie Ihr Projekt benennen können. Es sind nur Buchstaben, Zahlen, Anführungszeichen, Bindestriche, Leerzeichen und Ausrufezeichen zulässig.

Sobald du getroffen hast Erstellen, In der rechten unteren Ecke der Seite wird ein Dialogfeld angezeigt, das darauf hinweist, dass das Projekt erstellt wird.

Schritt 2: Aktivieren Sie die Google Fit-API

Wenn das Projekt eingerichtet ist, werden Sie zum Projekt geleitet Überblick Seite. Die einfachste Möglichkeit, die Google Fit-API zu finden, ist die Suche nach dem Keyword "passen". Wählen Fitness-API von den Ergebnissen, die erscheinen.

Klicken API aktivieren zu ermöglichen Fitness-API.

Nach dem Aktivieren der Fitness-API erhalten Sie eine Warnung, die Sie darüber informiert, dass Sie auch Anmeldeinformationen erstellen müssen, um die Fitness-API zu verwenden. Glücklicherweise enthält die Warnung eine Schaltfläche, mit der Sie zu der Schaltfläche gelangen können Referenzen Seite.

Schritt 3: Erstellen Sie Anmeldeinformationen

Auf der Referenzen Seite, müssen Sie einige allgemeine Informationen zu Ihrer Anwendung in der Assistent für Anmeldeinformationen. Geben Sie an, dass Sie das verwenden Fitness-API, dass die API von einem aufgerufen wird Android Anwendung, auf die die Anwendung zugreifen muss Benutzerdaten.

Klicken Sie anschließend auf Welche Nachweise brauche ich?? unten, um fortzufahren und eine OAuth 2.0-Client-ID für Ihre Android-Anwendung zu erstellen. Für diesen Schritt benötigen Sie zwei wichtige Informationen:

  • Signaturzertifikat Fingerabdruck
  • Paketname für die Anwendung

Sie können den Fingerabdruck des Signaturzertifikats abrufen, indem Sie ein Terminal oder eine Eingabeaufforderung öffnen und zum Speicherort des Signaturzertifikats Ihrer Anwendung navigieren. Dies ist entweder Ihr Freigabeschlüssel oder der Standard debug.keystore Zertifikat, das Android Studio verwendet. Nachdem Sie zu Ihrem Keystore navigiert haben, können Sie mit dem folgenden Befehl den erforderlichen SHA1 generieren debug.keystore ist der Name des Signaturzertifikats.

keytool -list -v -keystore debug.keystore

Fügen Sie den SHA1-Schlüssel in das SHA1-Feld ein und geben Sie ein com.tutsplus.googlefit in das Feld Paketname.

Schließlich müssen Sie den OAuth 2.0-Einwilligungsbildschirm konfigurieren. Dies ist der Bildschirm, der dem Benutzer angezeigt wird, damit er Ihrer App die Berechtigung erteilen kann, seine Fitnessdaten zu verwenden. Für diesen Schritt müssen Ihre E-Mail-Adresse und ein Produktname den Benutzern angezeigt werden. Für dieses Tutorial habe ich eingegeben Tuts + Google Fit.

Klicken Fortsetzen und klicken Sie auf der nächsten Seite auf Erledigt um den Einrichtungsvorgang abzuschließen.

Schritt 4: Android-Projekt einrichten

Wenn Ihr Projekt in der Google Developer Console eingerichtet und konfiguriert ist, können Sie mit dem Erstellen eines neuen Android-Projekts beginnen. Stellen Sie sicher, dass der Paketname mit dem von Ihnen eingegebenen übereinstimmt Google Developer Console und stellen Sie die Anwendung auf die Telefon und Tablet Plattformen mit einer Mindest-SDK-Version von 14. Die Mindest-API-Stufe für Google Fit ist 9. Erstellen Sie eine  Leere Aktivität Damit das Basisprojekt sauber bleibt, können Sie sich in diesem Tutorial auf die Google Fit-API konzentrieren.

Öffnen Sie nach dem Einrichten des Projekts die Projekte build.gradle Datei und importieren Sie das Fitnesspaket aus den Google Play Services, indem Sie die folgende Zeile in das Feld einfügen Abhängigkeiten Knoten.

"com.google.android.gms: play-services-fitness: 8.4.0" kompilieren

Als nächstes öffnen MainActivity.java und fügen Sie die folgenden Schnittstellen hinzu:

  • OnDataPointListener
  • GoogleApiClient.ConnectionCallback
  • GoogleApiClient.OnConnectionFailedListener

Nachdem Sie die erforderlichen Methoden für diese Schnittstellen hinzugefügt haben, sollte Ihre Klasse wie folgt aussehen:

public class MainActivity erweitert AppCompatActivity implementiert OnDataPointListener, GoogleApiClient.ConnectionCallbacks, GoogleApiClient.OnConnectionFailedListener @Override protected void onCreate (Bundle savedInstanceState) super.onCreate (savedInstanceState); setContentView (R.layout.activity_main);  @Override public void onConnected (Bundle-Paket)  @Override public void onConnectionSuspended (int i)  @Override public void onConnectionFailed (ConnectionResult connectionResult)  @Override public void onDataPoint (DataPoint dataPoint) 

Erstellen Sie außerdem die Member-Variablen, die Sie für dieses Lernprogramm verwenden werden. Sie können die folgenden Zeilen an die Spitze der Klasse kopieren:

privates statisches final int REQUEST_OAUTH = 1; private static final String AUTH_PENDING = "auth_state_pending"; private boolean authInProgress = false; privater GoogleApiClient mApiClient;

Im nächsten Schritt stellen Sie eine Verbindung zu Google Play Services her und erfahren, wie Sie in Ihrer App auf die Fitnessdaten des Nutzers zugreifen.

2. Fitness-API verwenden

Schritt 1: Verbindung zu Google Play-Diensten herstellen

Nachdem das Projekt in Android Studio und der Google Developer Console eingerichtet wurde, ist es an der Zeit, sich mit der Fitness-API zu beschäftigen. In dem onCreate (), Sie prüfen, ob Ihre App bereits versucht, die Fitness-API zu autorisieren. Sie initialisieren dann das GoogleApiClient Beispiel durch Hinzufügen der Fitness Sensors API, Definieren eines Bereichs und Registrieren der Anwendungsrückrufe. Wenn Sie keinen Bereich anfordern, kann Ihre App nicht für die Fitness Sensors API autorisiert werden.

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

Nach dem Initialisieren der GoogleApiClient Beispielsweise müssen Sie eine Verbindung zum Backend von Google herstellen. Sie können das in tun am Start().

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

Wenn der Benutzer die Anwendung zum ersten Mal ausführt, schlägt die Verbindung zum Fitness-API fehl, da der Benutzer Ihre App für den Zugriff auf ihre Fitnessdaten autorisieren muss. Sie können dieses Ereignis in hören onConnectionFailed () und reagieren Sie entsprechend, indem Sie prüfen, ob die Autorisierung läuft. Wenn ja, rufen Sie an startResolutionForResult () So können Google Play-Dienste den Benutzer ordnungsgemäß behandeln, der die Erlaubnis zur Verwendung seiner Informationen erteilt.

@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"); 

Wenn Sie Ihre Anwendung jetzt ausführen, wird möglicherweise ein Dialogfeld angezeigt, in dem Sie aufgefordert werden, ein Google-Konto auszuwählen, das Sie verwenden möchten, wenn Sie mehrere Konten auf Ihrem Gerät verwendet haben.

Wenn das Betriebssystem weiß, welches Konto verwendet werden soll, wird in Ihrer Anwendung ein neues Dialogfeld angezeigt, in dem der Benutzer aufgefordert wird, der App die Berechtigung zum Lesen von Fitnessdaten zu erteilen.

In diesem Stadium erteilt der Benutzer Ihrer Anwendung entweder die Berechtigung, ihre Daten zu verwenden, oder er schließt das Dialogfeld und bricht den Vorgang ab. Sie können beide Ereignisse in abhören onActivityResult () und das Ergebnis handhaben. Wenn der Benutzer Ihre Anwendungserlaubnis erteilt, erhält Ihre App eine RESULT_OK Antwort und es kann dann versucht werden, eine Verbindung zum Google API-Client herzustellen.

@Override protected void onActivityResult (int requestCode, int resultCode, Intent-Daten) 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"); 

Ihre Anwendung sollte nun erfolgreich eine Verbindung zu den Google Play-Diensten herstellen können. So können Sie sich ganz auf die Fitness-API konzentrieren.

Schritt 2: Zugreifen auf Schrittdaten mit der Fitness-API

Wenn dein GoogleApiClient Instanz hat sich mit Google verbunden, die onConnected () Callback wird ausgelöst. In diesem Rückruf müssen Sie einen neuen erstellen DataSourcesRequest Objekt, das die Art der Daten definiert, an denen Ihre Anwendung interessiert ist. Sie müssen auch ein ResultCallback Damit wird festgelegt, was die App tun soll, wenn Schritte vom Gerät abgerufen werden können. Rufen Sie die erstellten Objekte auf Fitness.SensorsApi.findDataSources () um nach einer gültigen Schrittdatenquelle zu suchen.

@Override public void onConnected (Bundle-Bundle) DataSourcesRequest dataSourceRequest = new DataSourcesRequest.Builder () .setDataTypes (DataType.TYPE_STEP_COUNT_CUMULATIVE) .setDataSourceTypes (DataSource.TYTC). ResultCallback dataSourcesResultCallback = new ResultCallback() @OoRive public vReadOutReadOffice (DataSourcesResult DataSourcesResult) für (DataSource DataSource: DataSourcesResult.getDataSources ()) wenn (DataType.TYPE_STEP_COUNT_CUMULATIVE.equals (DataSource.getDataTreeTataTools) (). ; Fitness.SensorsApi.findDataSources (mApiClient, dataSourceRequest) .setResultCallback (dataSourcesResultCallback); 

Sie können feststellen, dass die registerFitnessDataListener () Methode existiert eigentlich nicht. Dies ist eine Hilfsmethode, die aufgerufen wird, wenn die Datenquelle für den Schrittzähler gefunden wird. Anschließend wird eine erstellt Sensoranforderung Objekt zum Anfordern von Daten vom Schrittzahlsensor.

Im folgenden Codeausschnitt wird der Sensoranforderung Das Objekt versucht alle drei Sekunden, die Schrittzahl zu finden. Das Fitness.SensorApi fügt dann die Anforderung mit einem neuen hinzu OnDataPointListener Wenn neue Daten verfügbar sind, wird der Listener ausgelöst. Wenn keine neuen Daten gefunden werden, wird die OnDataPointListener wird nicht ausgelöst und die Fitness API wartet weitere drei Sekunden, bevor sie erneut prüft.

private void registerFitnessDataListener (DataSource-DataSource, DataType-Datentyp) SensorRequest-Anfrage = neue SensorRequest.Builder () .setDataSource (DataSource) .setDataType (DataType) .setSamplingRate (3, TimeUnit.SECONDS) .build (); Fitness.SensorsApi.add (mApiClient, Anfrage, this) .setResultCallback (neuer ResultCallback)() @Override public void onResult (Statusstatus) if (status.isSuccess ()) Log.e ("GoogleFit", "SensorApi erfolgreich hinzugefügt"); ); 

Wenn eine Änderung der Schrittzahl festgestellt wird, onDataPoint () wird aufgerufen. In dieser Methode durchlaufen Sie die Felder in der Datenpunkt Parameter und Anzeige a Toast Nachricht mit dem Feldnamen und Wert. In diesem Beispiel wird dies der Schrittzähler sein. In Ihren eigenen Apps würden Sie eine passendere Logik verwenden, um Ihre Aufgabe auszuführen. Sie werden feststellen, dass die Toast Befehl ist in eine verpackt Lauffähig das ist an weitergegeben runOnUiThread. Dies liegt daran, dass der Callback nicht im Haupt-UI-Thread ausgelöst wird.

@Override public void onDataPoint (DataPoint dataPoint) für (endgültiges Feldfeld: dataPoint.getDataType (). GetFields ()) final Wert value = dataPoint.getValue (Feld); runOnUiThread (new Runnable () @Override public void run () Toast.makeText (getApplicationContext (), "Field:" + field.getName () + "Value:" + value, Toast.LENGTH_SHORT) .show (); ); 

Für dieses Beispiel müssen Sie zwei weitere Dinge tun. Der erste trennt sich vom SensorApi und Google Play-Services, wenn Sie mit deren Verwendung fertig sind. In diesem Beispiel machen Sie das wann onStop () wird genannt. Die zweite speichert das authInProgress Wert, der von überprüft wird onCreate () im onSavedInstanceState ().

@Override protected void onStop () super.onStop (); Fitness.SensorsApi.remove (mApiClient, this) .setResultCallback (neuer ResultCallback)() @Override public void onResult (Statusstatus) if (status.isSuccess ()) mApiClient.disconnect (); );  @Override protected void onSaveInstanceState (Bundle outState) super.onSaveInstanceState (outState); outState.putBoolean (AUTH_PENDING, authInProgress); 

Fazit

In diesem Lernprogramm haben Sie erfahren, wie Sie eine Verbindung mit der Google Play Services Fitness-API herstellen und Fitnesssensordaten vom Gerät des Nutzers lesen. So einfach wie Schritt-Daten für Ihre Benutzer können sich für Anwendungen wie Android Wear-Zifferblätter oder Ziel-Tracker als unglaublich wertvoll erweisen. Es gibt Dutzende anderer Arten von Datenquellen, die Sie verwenden können, und viele andere APIs in Google Fit, um Ihre Apps noch besser zu machen.