Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
242 views
in Technique[技术] by (71.8m points)

android - 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
}
question from:https://stackoverflow.com/questions/65872381/how-to-get-google-fit-nutrition-data

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)
Waitting for answers

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...