Thursday, 28 January 2021

How to get google fit nutrition data

I cannot google fit to return any data pertaining to consumed calories. The datasets never contain any data points. Google fit home screen shows 623 calories. I entered the food calorie data via the LoseIt app.

    fun getStartTime(): Long {
    val cal = Calendar.getInstance()
    cal.time = Date()
    val endTime = cal.timeInMillis
    cal.add(Calendar.YEAR, -1)
    return cal.timeInMillis
}

fun getEndTime(): Long {
    val cal = Calendar.getInstance()
    cal.time = Date()
    val endTime = cal.timeInMillis
    return cal.timeInMillis
}

    fun getFitnessOptions(): FitnessOptions {
    return FitnessOptions.builder()
        .addDataType(
            DataType.TYPE_NUTRITION,
            FitnessOptions.ACCESS_READ
        )
        .addDataType(
            DataType.AGGREGATE_NUTRITION_SUMMARY,
            FitnessOptions.ACCESS_READ
        )

        .build()
   }


suspend fun readCaloriesData(activity: Context): MutableList<HKData> {

    val account = GoogleSignIn.getAccountForExtension(activity, getFitnessOptions())

    val response =
        Fitness.getHistoryClient(activity, account)
            .readData(
                DataReadRequest.Builder()
                    .read(DataType.TYPE_NUTRITION)
                    .setTimeRange(getStartTime(), getEndTime(), TimeUnit.MILLISECONDS)
                    .build()
            )

    val result = withContext(Dispatchers.IO) { Tasks.await(response) }

    if (result != null) {
        val data = result.getDataSets()
        return dumpCalorieData(data)
    } else {
        Log.d(this.toString(), "Fitness.getHistoryClient task failed")
    }

    return mutableListOf()
}

fun dumpCalorieData(dataSets: MutableList<DataSet>): MutableList<HKData>
{
    val dataArray: MutableList<HKData> = mutableListOf()

    for(dataSet in dataSets) {

        Log.i(
            this.javaClass.canonicalName,
            "Data returned for Data type: " + dataSet.dataType.name
        )

        if (dataSet.dataPoints.count() < 1) { Log.i(
            this.javaClass.canonicalName,
            "No data in dataset"
        )}

        //never gets to here


        for (dp in dataSet.dataPoints) {

        }
    }

    return dataArray
}


from How to get google fit nutrition data

No comments:

Post a Comment