Google Fit è una piattaforma che consente agli sviluppatori di creare applicazioni incentrate sui dati di idoneità dell'utente. Uno degli strumenti che Google ha fornito è Google Fit per Android, disponibile come pacchetto in Google Play Services.
Sebbene siano disponibili molte API diverse per Google Fit, come illustrato in questo articolo di Enunti Tuts +, questo tutorial si concentra sull'utilizzo di Google Fit per creare abbonamenti in background a bassa potenza per i dati dei sensori. Esploriamo come sfruttare i servizi di Google Play per archiviare i dati di fitness in modo che possano essere consultati in un secondo momento.
L'API di registrazione differisce dall'API dei sensori in quanto i dati dei sensori live non vengono consegnati all'API di registrazione, ma piuttosto i dati vengono salvati online per salvare un record dell'attività dell'utente. Questo tutorial include un progetto di esempio, che puoi scaricare da GitHub.
Per utilizzare Google Fit, devi creare un ID cliente OAuth 2.0 e registrare la tua applicazione tramite la Google Developer Console. Puoi trovare una spiegazione dettagliata su come configurare la Google Developer Console nel mio tutorial sull'API di Google Fit Sensors.
Dopo aver configurato la tua applicazione per l'autenticazione nella Google Developer Console, utilizza il nome del pacchetto registrato per creare una nuova applicazione Android con un SDK minimo di 14 e uno vuoto Attività
.
Con l'app Android di base creata, apri il build.gradle file e includi Google Play Services sotto il nodo delle dipendenze e sincronizza la tua app.
compila "com.google.android.gms: play-services-fitness: 8.4.0"
Ora dovresti essere in grado di includere le classi necessarie di Google Play Services nella tua applicazione. Prima di immergerci nel codice Java per questo tutorial, apri activity_main.xml e modificarlo in modo che ne includa due Pulsante
elementi che verranno utilizzati per dimostrare alcune delle funzionalità dell'API di registrazione.
Quando viene eseguita la tua app, l'interfaccia utente sarà simile all'immagine qui sotto.
Per completare la configurazione del progetto, apri MainActivity.java e implementare i seguenti callback e i loro metodi richiesti:
GoogleApiClient.ConnectionCallbacks
GoogleAPiClient.OnConnectionFailedListener
View.OnClickListener
È inoltre necessario aggiungere le variabili membro per la classe, come mostrato di seguito.
public class MainActivity estende AppCompatActivity implementa GoogleApiClient.ConnectionCallbacks, GoogleApiClient.OnConnectionFailedListener, View.OnClickListener private Button mCancelSubscriptionsBtn; Pulsante privato mShowSubscriptionsBtn; ResultCallback privatomSubscribeResultCallback; ResultCallback privato mCancelSubscriptionResultCallback; ResultCallback privato mListSubscriptionsResultCallback; GoogleApiClient privato mGoogleApiClient; @Override protected void onCreate (Bundle savedInstanceState) super.onCreate (savedInstanceState); setContentView (R.layout.activity_main); @Override public void onConnected (bundle @Nullable 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 (Visualizza v)
Prima di poter iniziare a utilizzare i callback e le viste che hai definito sopra, è necessario inizializzarli. Facciamo questo creando due metodi di supporto, uno per inizializzare le viste e uno per inizializzare i callback che vengono chiamati onCreate ()
.
Il initViews ()
metodo punta il Pulsante
oggetti agli elementi definiti in activity.xml e imposta un OnClickListener
per ogni pulsante.
@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 (questo); mShowSubscriptionsBtn.setOnClickListener (questo);
Nel initCallbacks ()
, le cose diventano un po 'più interessanti. Ogni callback viene utilizzato per una specifica operazione asincrona dell'API di registrazione. Come indicano i loro nomi, mSubscribeResultCallback
viene chiamato quando aggiungi per la prima volta un abbonamento per un sensore, mCancelSubscriptionResultCallback
viene chiamato quando si annulla l'abbonamento e mListSubscriptionResultCallback
viene utilizzato quando si richiede un elenco di tutti gli abbonamenti.
Nel seguente snippet di codice, i due callback relativi all'avvio e all'arresto di una registrazione registrano solo un esito positivo o negativo. mListSubscriptionResultCallback
riceve un elenco di abbonamenti e disconnette le informazioni su ciascuno di essi ottenendo il Tipo di dati
e poi ciascuno Campo
associato all'abbonamento.
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 ("RecordingAPI", "Già iscritto a l'API di registrazione "); else Log.e ("RecordingAPI", "Iscritto all'API di registrazione"); ; mCancelSubscriptionResultCallback = new ResultCallback () @Override public void onResult (@NonNull Status status) if (status.isSuccess ()) Log.e ("RecordingAPI", "Abbonamenti annullati!"); else // Sottoscrizione non rimossa Log.e ("RecordingAPI", "Impossibile annullare le iscrizioni"); ; mListSubscriptionsResultCallback = new ResultCallback () @Override public void onResult (@NonNull ListSubscriptionsResult listSubscriptionsResult) for (Sottoscrizione dell'abbonamento: listSubscriptionsResult.getSubscriptions ()) DataType dataType = subscription.getDataType (); Log.e ("RecordingAPI", dataType.getName ()); for (Campo field: dataType.getFields ()) Log.e ("RecordingAPI", field.toString ()); ;
Ora che hai il quadro generale per la tua app di esempio, è ora di avvolgere tutto collegando a Google Play Services e richiedendo abbonamenti.
Nel onCreate ()
, puoi inizializzare e connetterti ai servizi di Google Play dichiarando che utilizzi Fitness.RECORDING_API
, aggiungendo un ambito per leggere i dati relativi all'attività fisica e impostarlo per connettersi / disconnettersi automaticamente attraverso il ciclo di vita dell'applicazione.
mGoogleApiClient = new GoogleApiClient.Builder (this) .addApi (Fitness.RECORDING_API) .addScope (new Scope (Scopes.FITNESS_ACTIVITY_READ)) .addConnectionCallbacks (this) .enableAutoManage (this, 0, this) .build ();
In qualsiasi momento dopo il GoogleApiClient
è connesso, è possibile richiedere un abbonamento. Per questo tutorial, ci iscriviamo a onConnected ()
. Il seguente frammento mostra come avviare una sottoscrizione per le modifiche del conteggio degli step dell'utente, sebbene tu possa accedere a qualsiasi sensore supportato da Google Fit.
Se una sottoscrizione è già in esecuzione a causa di un'azione precedente, il callback riceve un codice di stato di FitnessStatusCodes.SUCCESS_ALREADY_SUBSCRIBED
.
@Override public void onConnected (bundle @Nullable Bundle) Fitness.RecordingApi.subscribe (mGoogleApiClient, DataType.TYPE_STEP_COUNT_DELTA) .setResultCallback (mSubscribeResultCallback);
A volte può essere utile richiedere un elenco di abbonamenti. In precedenza, hai creato due pulsanti per queste operazioni. Nel al clic()
metodo, si controlla quale pulsante è stato toccato ed eseguire l'azione corrispondente.
@Override public void onClick (View v) switch (v.getId ()) case R.id.btn_cancel_subscriptions: cancelSubscriptions (); rompere; caso R.id.btn_show_subscriptions: showSubscriptions (); rompere;
Se showSubscriptions ()
viene chiamato, quindi l'applicazione richiede un elenco di abbonamenti associati all'API di registrazione.
private void showSubscriptions () Fitness.RecordingApi.listSubscriptions (mGoogleApiClient) .setResultCallback (mListSubscriptionsResultCallback);
Questo causa mListSubscriptionsResultCallback
per disconnettere tutti gli abbonamenti connessi. Il risultato è simile a questo:
... /com.tutsplus.googlefitrecordingapi E / RecordingAPI: com.google.step_count.delta ... /com.tutsplus.googlefitrecordingapi E / RecordingAPI: steps (i)
Cancellare un abbonamento è semplice come puoi vedere qui sotto.
private void cancelSubscriptions () Fitness.RecordingApi.unsubscribe (mGoogleApiClient, DataType.TYPE_STEP_COUNT_DELTA) .setResultCallback (mCancelSubscriptionResultCallback);
Ora dovresti avere una conoscenza di base su come connettersi a Google Fit da un'app Android e lavorare con l'API di registrazione. Anche se questo potrebbe non sembrare molto al momento, apre la strada per te per memorizzare informazioni sulle attività fisiche dell'utente in modo che possano essere accessibili da altre API di Google Fit all'interno della tua applicazione.