Crear un cliente de la API de Fitness

En este ejemplo, se muestra cómo crear un cliente de la API de Fitness.

Crea el cliente de la API de la siguiente manera:

  1. Crea una instancia de FitnessOptions y declara los tipos de datos y el tipo de acceso (lectura o escritura) que necesita tu app:

    val fitnessOptions = FitnessOptions.builder()
        .addDataType(DataType.TYPE_STEP_COUNT_DELTA, FitnessOptions.ACCESS_READ)
        .addDataType(DataType.AGGREGATE_STEP_COUNT_DELTA, FitnessOptions.ACCESS_READ)
        .build()
    
  2. Obtén una instancia del objeto Account para usar con la API:

    val account = GoogleSignIn.getAccountForExtension(this, fitnessOptions)
    
  3. Verifica si el usuario otorgó el acceso a datos necesario y, si no lo hizo, inicia el flujo de autorización:

    if (!GoogleSignIn.hasPermissions(account, fitnessOptions)) {
        GoogleSignIn.requestPermissions(
            this, // your activity
            GOOGLE_FIT_PERMISSIONS_REQUEST_CODE, // e.g. 1
            account,
            fitnessOptions)
    } else {
        accessGoogleFit()
    }
    
  4. Si se requiere el flujo de autorización, controla la respuesta del usuario:

    override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
        super.onActivityResult(requestCode, resultCode, data)
        when (resultCode) {
            Activity.RESULT_OK -> when (requestCode) {
                GOOGLE_FIT_PERMISSIONS_REQUEST_CODE -> accessGoogleFit()
                else -> {
                    // Result wasn't from Google Fit
                }
            }
            else -> {
                // Permission not granted
            }
        }
    }
    
  5. Una vez que el usuario haya autorizado el acceso a los datos solicitados, crea un cliente de entrenamiento (por ejemplo, un HistoryClient para leer o escribir datos históricos de entrenamiento) según el propósito y las necesidades de tu app:

    private fun accessGoogleFit() {
        val end = LocalDateTime.now()
        val start = end.minusYears(1)
        val endSeconds = end.atZone(ZoneId.systemDefault()).toEpochSecond()
        val startSeconds = start.atZone(ZoneId.systemDefault()).toEpochSecond()
    
        val readRequest = DataReadRequest.Builder()
            .aggregate(DataType.AGGREGATE_STEP_COUNT_DELTA)
            .setTimeRange(startSeconds, endSeconds, TimeUnit.SECONDS)
            .bucketByTime(1, TimeUnit.DAYS)
            .build()
        val account = GoogleSignIn.getAccountForExtension(this, fitnessOptions)
        Fitness.getHistoryClient(this, account)
            .readData(readRequest)
            .addOnSuccessListener({ response ->
                // Use response data here
                Log.i(TAG, "OnSuccess()")
            })
            .addOnFailureListener({ e -> Log.d(TAG, "OnFailure()", e) })
    }