Google Fit Android API Время активности?

В настоящее время я использую Google Fit Android API для доступа к данным счетчика шагов в моем приложении. В приложении Google fit для Android есть значение для активного времени Прикрепленное изображение значения, к которому я пытаюсь получить доступ

Я пробовал многочисленные способы доступа к этим данным в своем приложении, но не могу понять, какой из типов мгновенных данных мне следует использовать? или если я совершенно не прав и нужно попробовать что-то другое?

Любая помощь будет принята с благодарностью. Спасибо

2 ответа

У меня было такое же сомнение, и я использовал эту ссылку https://developers.google.com/fit/android/history Я думаю, что у меня есть возможное решение, в этом случае я установил временной интервал с полуночи до настоящего времени. Вам необходимо создать DataReadRequest, используя bucketByActivitySegment

private class VerifyDataTask extends AsyncTask<Void, Void, Void> {
    @Override
    protected Void doInBackground(Void... voids) {
        // Begin by creating the query.
        DataReadRequest readRequest = queryFitnessData();

        // [START read_dataset]
        // Invoke the History API to fetch the data with the query and await the result of
        // the read request.
        DataReadResult dataReadResult =
                Fitness.HistoryApi.readData(mClient, readRequest).await(1, TimeUnit.MINUTES);
        // [END read_dataset]

        // For the sake of the sample, we'll print the data so we can see what we just added.
        // In general, logging fitness information should be avoided for privacy reasons.
        printData(dataReadResult);

        return null;
    }
}

public static DataReadRequest queryFitnessData() {
    // [START build_read_data_request]
    // Setting a start and end date using a range of 1 week before this moment.
    Calendar cal = Calendar.getInstance();
    Date now = new Date();
    cal.setTime(now);
    long endTime = cal.getTimeInMillis();
    cal.set(Calendar.HOUR_OF_DAY, 0);
    cal.set(Calendar.MINUTE, 0);
    cal.set(Calendar.SECOND, 0);
    long startTime = cal.getTimeInMillis();

    DataSource ACTIVITY_SEGMENT = new DataSource.Builder()
            .setDataType(DataType.TYPE_ACTIVITY_SEGMENT)
            .setType(DataSource.TYPE_DERIVED)
            .setStreamName("estimated_activity_segment")
            .setAppPackageName("com.google.android.gms")
            .build();

    DataReadRequest readRequest = new DataReadRequest.Builder()
            .aggregate(ACTIVITY_SEGMENT, DataType.AGGREGATE_ACTIVITY_SUMMARY)
            .bucketByActivitySegment(1, TimeUnit.SECONDS)
            .setTimeRange(startTime, endTime, TimeUnit.MILLISECONDS)
            .build();
    // [END build_read_data_request]

    return readRequest;
}

public static void printData(DataReadResult dataReadResult) {
    // [START parse_read_data_result]
    // If the DataReadRequest object specified aggregated data, dataReadResult will be returned
    // as buckets containing DataSets, instead of just DataSets.
    if (dataReadResult.getBuckets().size() > 0) {
        Log.i(TAG, "Number of returned buckets of DataSets is: "
                + dataReadResult.getBuckets().size());
        for (Bucket bucket : dataReadResult.getBuckets()) {
            Log.i(TAG, bucket.getActivity());
            long activeTime = bucket.getEndTime(TimeUnit.MINUTES) - bucket.getStartTime(TimeUnit.MINUTES);
            Log.i(TAG, "Active time " + activeTime);
        }
    } 
    // [END parse_read_data_result]
}

Переменная activeTime показывает активное время каждого упражнения в фитнесе, вам нужно посмотреть эту ссылку https://developers.google.com/android/reference/com/google/android/gms/fitness/FitnessActivities потому что одно из перечисленных действий является STILL: Пользователь все еще (не двигается).

Я надеюсь, что это помогло вам.

Каждый набор данных в Google Fit имеет время начала и время окончания. Вы можете просто потратить время, только вычтя их. Ниже приведен пример.

 if (dataReadResult.getBuckets().size() > 0) {
    for (Bucket bucket : dataReadResult.getBuckets()) {
        long activeTime = bucket.getEndTime(TimeUnit.MINUTES) - bucket.getStartTime(TimeUnit.MINUTES);
        Log.i(TAG, "Active time " + activeTime);
    }
}
Другие вопросы по тегам