Google Fit para Android API de grabación

Google Fit es una plataforma que permite a los desarrolladores crear aplicaciones que se centran en los datos de aptitud del usuario. Una de las herramientas que Google ha proporcionado es Google Fit para Android, que está disponible como un paquete en los Servicios de Google Play..

Si bien hay muchas API diferentes disponibles para Google Fit, como se explica en este artículo de Descripción general de Envato Tuts +, este tutorial se centra en el uso de Google Fit para crear suscripciones de fondo de baja potencia para datos de sensores. Exploramos cómo aprovechar los servicios de Google Play para almacenar datos de aptitud física para poder acceder a ellos más adelante..

La API de grabación difiere de la API de sensores en que los datos del sensor en vivo no se entregan a la API de grabación, sino que se guardan en línea para guardar un registro de la actividad del usuario. Este tutorial incluye un proyecto de muestra, que puede descargar desde GitHub.

1. Configuración del proyecto

Paso 1: configurar la consola de desarrollador

Para usar Google Fit, debe crear un ID de cliente de OAuth 2.0 y registrar su aplicación a través de la Consola de desarrolladores de Google. Puede encontrar una explicación detallada de cómo configurar la Consola de desarrollador de Google en mi tutorial sobre la API de sensores de ajuste de Google.

Paso 2: Crea el Proyecto Android

Una vez que haya configurado su aplicación para la autenticación en la Consola de desarrollador de Google, use el nombre del paquete que registró para crear una nueva aplicación de Android con un SDK mínimo de 14 y un vacío. Actividad.

Con la aplicación base de Android creada, abre el construir.gradle archiva e incluye Google Play Services en el nodo de dependencias y sincroniza tu aplicación.

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

Ahora debería poder incluir las clases necesarias de Google Play Services en su aplicación. Antes de sumergirnos en el código Java para este tutorial, abra activity_main.xml y modificarlo para que incluya dos. Botón Elementos que se utilizarán para demostrar algunas de las funciones de la API de grabación..

  

Cuando se ejecuta su aplicación, la interfaz de usuario se verá como la imagen de abajo.

Para finalizar la configuración de su proyecto, abra MainActivity.java e implementar las siguientes devoluciones de llamada y sus métodos requeridos:

  • GoogleApiClient.ConnectionCallbacks
  • GoogleAPiClient.OnConnectionFailedListener
  • View.OnClickListener

También debe agregar las variables de miembro para su clase, como se muestra a continuación.

la clase pública MainActivity extiende AppCompatActivity implementa GoogleApiClient.ConnectionCallbacks, GoogleApiClient.OnConnectionFailedListener, View.OnClickListener private Button mCancelSubscriptionsBtn; Botón privado mShowSubscriptionsBtn; ResultCallback privado mSubscribeResultCallback; ResultCallback privado mCancelSubscriptionResultCallback; ResultCallback privado mListSubscriptionsResultCallback; GoogleApiClient privado mGoogleApiClient; @Override protected void onCreate (Bundle savedInstanceState) super.onCreate (savedInstanceState); setContentView (R.layout.activity_main);  @ Anular la anulación pública onConnected (@Nullable Bundle bundle) Log.e ("RecordingAPI", "onConnected");  @ Omitir public void onConnectionSuspended (int i) Log.e ("RecordingAPI", "onConnectionSuspended");  @ Anular público anular onConnectionFailed (@NonNull ConnectionResult connectionResult) Log.e ("RecordingAPI", "onConnectionFailed");  @Override public void onClick (View v) 

2. Inicialización

Antes de que pueda comenzar a utilizar las devoluciones de llamada y las vistas que definió anteriormente, debe inicializarlas. Hacemos esto creando dos métodos de ayuda, uno para inicializar las vistas y otro para inicializar las devoluciones de llamada a las que se llama onCreate ().

los initViews () método apunta el Botón objetos a los elementos definidos en actividad.xml y establece un OnClickListener para cada botón.

@Override protected void onCreate (Bundle savedInstanceState) super.onCreate (savedInstanceState); setContentView (R.layout.activity_main); initViews (); initCallbacks ();  privado void initViews () mCancelSubscriptionsBtn = (Button) findViewById (R.id.btn_cancel_subscriptions); mShowSubscriptionsBtn = (Button) findViewById (R.id.btn_show_subscriptions); mCancelSubscriptionsBtn.setOnClickListener (this); mShowSubscriptionsBtn.setOnClickListener (this); 

En initCallbacks (), Las cosas se ponen un poco más interesantes. Cada devolución de llamada se utiliza para una operación asíncrona específica de la API de grabación. Como sus nombres implican, mSubscribeResultCallback se llama la primera vez que agrega una suscripción para un sensor, mCancelSubscriptionResultCallback se llama cuando cancela esa suscripción, y mListSubscriptionResultCallback se utiliza cuando solicita una lista de todas las suscripciones.

En el siguiente fragmento de código, las dos devoluciones de llamada relacionadas con el inicio y la detención de una suscripción solo registran un éxito o un error. mListSubscriptionResultCallback recibe una lista de suscripciones y desconecta la información sobre cada una de ellas obteniendo el Tipo de datos y luego cada Campo asociado a la suscripción.

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", "Ya se suscribió a la API de grabación ");  else Log.e ("RecordingAPI", "Suscrito a la API de grabación"); ; mCancelSubscriptionResultCallback = new ResultCallback() @Override public void onResult (@NonNull Status status) if (status.isSuccess ()) Log.e ("RecordingAPI", "¡Suscripciones canceladas!");  else // Suscripción no eliminada Log.e ("RecordingAPI", "Fallo al cancelar suscripciones"); ; mListSubscriptionsResultCallback = nuevo ResultCallback() @Override public void onResult (@NonNull ListSubscriptionsResult listSubscriptionsResult) para (Suscripción de la suscripción: listSubscriptionsResult.getSubscriptions ()) DataType dataType = membership.getDataType (); Log.e ("RecordingAPI", dataType.getName ()); para (campo Campo: dataType.getFields ()) Log.e ("RecordingAPI", field.toString ()); ; 

3. Conectando y controlando suscripciones

Ahora que ya tiene el marco general para su aplicación de muestra, es hora de resumir todo conectándose a Google Play Services y solicitando suscripciones..

En onCreate (), puede inicializar y conectarse a Google Play Services declarando que usa Fitness.RECORDING_API, agregar un alcance para leer datos de actividad física, y configurarlo para que se conecte / desconecte automáticamente a lo largo del ciclo de vida de la aplicación.

mGoogleApiClient = new GoogleApiClient.Builder (this) .addApi (Fitness.RECORDING_API) .addScope (new Scope (Scopes.FITNESS_ACTIVITY_READ)) .addConnectionCallbacks (this) .enableAutoManage (this, 0, this).

En cualquier momento después de la GoogleApiClient Se ha conectado, puede solicitar una suscripción. Para este tutorial, nos suscribimos en onConnected (). El siguiente fragmento de código muestra cómo iniciar una suscripción para los cambios en el recuento de pasos del usuario, aunque puede acceder a cualquier sensor compatible con Google Fit..

Si una suscripción ya se está ejecutando debido a una acción anterior, entonces la devolución de llamada recibe un código de estado de FitnessStatusCodes.SUCCESS_ALREADY_SUBSCRIBED.

@Override public void onConnected (@Nullable Bundle bundle) Fitness.RecordingApi.subscribe (mGoogleApiClient, DataType.TYPE_STEP_COUNT_DELTA) .setResultCallback (mSubscribeResultCallback); 

A veces puede ser útil solicitar una lista de suscripciones. Anteriormente, creó dos botones para estas operaciones. En el al hacer clic() Método, usted verifica qué botón fue tocado y realiza la acción correspondiente.

@Override public void onClick (View v) switch (v.getId ()) case R.id.btn_cancel_subscriptions: cancelSubscriptions (); descanso;  caso R.id.btn_show_subscriptions: showSubscriptions (); descanso; 

Si showSubscriptions () se llama, luego la aplicación solicita una lista de suscripciones asociadas con la API de grabación.

void privado showSubscriptions () Fitness.RecordingApi.listSubscriptions (mGoogleApiClient) .setResultCallback (mListSubscriptionsResultCallback); 

Esto causa mListSubscriptionsResultCallback para cerrar sesión en todas las suscripciones conectadas. El resultado se ve algo como esto:

… /Com.tutsplus.googlefitrecordingapi E / RecordingAPI: com.google.step_count.delta… /com.tutsplus.googlefitrecordingapi E / RecordingAPI: pasos (i)

Cancelar una suscripción es sencillo, como puede ver a continuación.

private void cancelSubscriptions () Fitness.RecordingApi.unsubscribe (mGoogleApiClient, DataType.TYPE_STEP_COUNT_DELTA) .setResultCallback (mCancelSubscriptionResultCallback); 

Conclusión

Ahora debe tener una comprensión básica de cómo conectarse a Google Fit desde una aplicación de Android y trabajar con la API de grabación. Si bien esto puede no parecer mucho en este momento, allana el camino para almacenar información sobre las actividades físicas del usuario para que otras API de Google Fit puedan acceder a ellas desde su aplicación..