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 + -Übersichtsartikel beschrieben, jedoch konzentriert sich dieses Tutorial auf die Verwendung von Google Fit zum Erstellen von Hintergrundabonnements für Sensordaten mit geringem Stromverbrauch. Wir untersuchen, wie Sie Google Play-Services nutzen können, um Fitnessdaten zu speichern, damit Sie zu einem späteren Zeitpunkt darauf zugreifen können.
Die Aufzeichnungs-API unterscheidet sich von der Sensor-API dadurch, dass keine Live-Sensordaten an die Aufzeichnungs-API übermittelt werden, sondern Daten online gespeichert werden, um eine Aufzeichnung der Benutzeraktivität zu speichern. Dieses Tutorial enthält ein Beispielprojekt, das Sie von GitHub herunterladen können.
Um Google Fit verwenden zu können, müssen Sie eine OAuth 2.0-Client-ID erstellen und Ihre Anwendung über die Google Developer Console registrieren. Eine ausführliche Erklärung zum Einrichten der Google Developer Console finden Sie in meinem Lernprogramm zur Google Fit Sensors-API.
Wenn Sie Ihre Anwendung für die Authentifizierung in der Google Developer Console konfiguriert haben, erstellen Sie mit dem von Ihnen registrierten Paketnamen eine neue Android-Anwendung mit einem Mindest-SDK von 14 und einem leeren Feld Aktivität
.
Öffnen Sie die erstellte Android-Basisanwendung build.gradle Datei und fügen Sie Google Play-Dienste in den Abhängigkeitsknoten ein und synchronisieren Sie Ihre App.
"com.google.android.gms: play-services-fitness: 8.4.0" kompilieren
Sie sollten jetzt in der Lage sein, die erforderlichen Google Play Services-Klassen in Ihre Anwendung aufzunehmen. Bevor wir uns mit dem Java-Code für dieses Lernprogramm beschäftigen, öffnen Sie activity_main.xml und modifizieren Sie es so, dass es zwei enthält Taste
Elemente, die zur Demonstration einiger Funktionen der Aufzeichnungs-API verwendet werden.
Wenn Ihre App ausgeführt wird, sieht die Benutzeroberfläche wie in der Abbildung unten aus.
Um die Einrichtung Ihres Projekts abzuschließen, öffnen Sie MainActivity.java und implementieren Sie die folgenden Callbacks und ihre erforderlichen Methoden:
GoogleApiClient.ConnectionCallbacks
GoogleAPiClient.OnConnectionFailedListener
View.OnClickListener
Sie müssen auch die Mitgliedsvariablen für Ihre Klasse hinzufügen, wie unten gezeigt.
Öffentliche Klasse MainActivity erweitert AppCompatActivity implementiert GoogleApiClient.ConnectionCallbacks, GoogleApiClient.OnConnectionFailedListener, View.OnClickListener private Button mCancelSubscriptionsBtn; private Schaltfläche mShowSubscriptionsBtn; privates ResultCallbackmSubscribeResultCallback; privates ResultCallback mCancelSubscriptionResultCallback; privates ResultCallback mListAbonnementsResultCallback; privater GoogleApiClient mGoogleApiClient; @Override protected void onCreate (Bundle savedInstanceState) super.onCreate (savedInstanceState); setContentView (R.layout.activity_main); @Override public void onConnected (@Nullable Bundle-Paket) Log.e ("RecordingAPI", "onConnected"); @Override public void onConnectionSuspended (int i) Log.e ("AufnahmeAPI", "onConnectionSuspended"); @Override public void onConnectionFailed (@NonNull ConnectionResult connectionResult) Log.e ("AufnahmeAPI", "onConnectionFailed"); @Override public void onClick (Ansicht v)
Bevor Sie die oben definierten Rückrufe und Ansichten verwenden können, müssen Sie sie initialisieren. Dazu erstellen wir zwei Hilfsmethoden, eine zum Initialisieren der Ansichten und eine zum Initialisieren der aufgerufenen Callbacks onCreate ()
.
Das initViews ()
Methode zeigt die Taste
Objekte zu den definierten Elementen in activity.xml und setzt ein OnClickListener
für jede Taste.
@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);
Im initCallbacks ()
, Dinge werden ein bisschen interessanter. Jeder Rückruf wird für einen bestimmten asynchronen Betrieb der Aufzeichnungs-API verwendet. Wie ihre Namen implizieren, mSubscribeResultCallback
wird aufgerufen, wenn Sie zum ersten Mal ein Abonnement für einen Sensor hinzufügen, mCancelSubscriptionResultCallback
wird aufgerufen, wenn Sie dieses Abonnement kündigen, und mListSubscriptionResultCallback
wird verwendet, wenn Sie eine Liste aller Abonnements anfordern.
Im folgenden Code-Snippet protokollieren die beiden Rückrufe, die sich auf das Starten und Stoppen eines Abonnements beziehen, nur einen Erfolg oder einen Fehler. mListSubscriptionResultCallback
erhält eine Liste der Abonnements und meldet Informationen zu jedem Abonnement ab Datentyp
und dann jeder Feld
mit dem Abonnement verbunden.
private void initCallbacks () mSubscribeResultCallback = new ResultCallback() @Override public void onResult (@NonNull Status status) if (status.isSuccess ()) if (status.getStatusCode () == FitnessStatusCodes.SUCCESS_ALREADY_SUBSCRIBED) Log.e ("AufnahmeAPI"), "Bereits angemeldet die Aufzeichnungs-API "); else Log.e ("RecordingAPI", "Abonniert für die Aufzeichnungs-API"); ; mCancelSubscriptionResultCallback = new ResultCallback () @Override public void onResult (@NonNull Status status) if (status.isSuccess ()) Log.e ("AufnahmeAPI", "Abgebrochene Abonnements!"); else // Abonnement nicht entfernt Log.e ("AufnahmeAPI", "Abonnement konnte nicht abgebrochen werden"); ; mListSubscriptionsResultCallback = new ResultCallback () @Override public void onResult (@NonNull ListSubscriptionsResult listSubscriptionsResult) für (Subskriptionsabonnement: listSubscriptionsResult.getSubscriptions ()) Datentyp DataType = Subscribe.getDataType (); Log.e ("RecordingAPI", dataType.getName ()); für (Feldfeld: dataType.getFields ()) Log.e ("RecordingAPI", field.toString ()); ;
Nachdem Sie nun den allgemeinen Rahmen für Ihre Beispiel-App zusammengestellt haben, können Sie alles abschließen, indem Sie eine Verbindung zu Google Play Services herstellen und Abonnements anfordern.
Im onCreate ()
, Sie können die Google Play-Dienste initialisieren und eine Verbindung herstellen, indem Sie die Verwendung erklären Fitness.RECORDING_API
, Hinzufügen eines Bereichs zum Lesen von Fitness-Aktivitätsdaten und Festlegen, dass die Verbindung durch den Lebenszyklus der Anwendung automatisch hergestellt oder getrennt wird.
mGoogleApiClient = new GoogleApiClient.Builder (this) .addApi (Fitness.RECORDING_API) .addScope (new Scope (Scopes.FITNESS_ACTIVITY_READ)) .addConnectionCallbacks (this) .enableAutoManage (this, 0, this) .build ();
Zu jeder Zeit nach dem GoogleApiClient
verbunden ist, können Sie ein Abonnement anfordern. Für dieses Tutorial abonnieren wir in onConnected ()
. Das folgende Snippet zeigt, wie Sie ein Abonnement für Änderungen der Schrittanzahl des Benutzers starten. Sie können jedoch auf jeden Sensor zugreifen, der von Google Fit unterstützt wird.
Wenn bereits ein Abonnement aufgrund einer früheren Aktion ausgeführt wird, erhält der Rückruf den Statuscode FitnessStatusCodes.SUCCESS_ALREADY_SUBSCRIBED
.
@Override public void onConnected (@Nullable Bundle-Paket) Fitness.RecordingApi.subscribe (mGoogleApiClient, DataType.TYPE_STEP_COUNT_DELTA) .setResultCallback (mSubscribeResultCallback);
Es kann manchmal nützlich sein, eine Liste von Abonnements anzufordern. Zuvor haben Sie zwei Schaltflächen für diese Vorgänge erstellt. In dem onClick ()
Methode, überprüfen Sie, welche Schaltfläche betätigt wurde, und führen Sie die entsprechende Aktion aus.
@Override public void onClick (Ansicht v) switch (v.getId ()) case R.id.btn_cancel_subscriptions: cancelSubscriptions (); brechen; case R.id.btn_show_subscriptions: showSubscriptions (); brechen;
Ob showSubscriptions ()
aufgerufen wird, fordert die Anwendung eine Liste der Abonnements an, die der Aufzeichnungs-API zugeordnet sind.
private void showSubscriptions () Fitness.RecordingApi.listSubscriptions (mGoogleApiClient) .setResultCallback (mListSubscriptionsResultCallback);
Dies bewirkt mListSubscriptionsResultCallback
um alle verbundenen Abonnements abzumelden. Das Ergebnis sieht ungefähr so aus:
… /Com.tutsplus.googlefitrecordingapi E / AufnahmeAPI: com.google.step_count.delta… /com.tutsplus.googlefitrecordingapi E / AufnahmeAPI: Schritte (i)
Das Stornieren eines Abonnements ist unkompliziert, wie Sie unten sehen können.
private void cancelSubscriptions () Fitness.RecordingApi.unsubscribe (mGoogleApiClient, DataType.TYPE_STEP_COUNT_DELTA) .setResultCallback (mCancelSubscriptionResultCallback);
Sie sollten jetzt ein grundlegendes Verständnis dafür haben, wie Sie von einer Android-App aus eine Verbindung zu Google Fit herstellen und mit der Aufzeichnungs-API arbeiten. Dies mag im Moment nicht viel erscheinen, aber Sie können Informationen über die physischen Aktivitäten des Nutzers speichern, damit andere Google Fit-APIs in Ihrer Anwendung darauf zugreifen können.