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.
Um Google Fit für Android verwenden zu können, müssen Sie:
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.
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.
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.
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:
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.
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.
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.
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). ResultCallbackdataSourcesResultCallback = 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);
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.