2

今日から歩数を上げようと思います。そのため、2つの解決策を見つけました。1)

private void getStepsToday() {
    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, 00);
    long startTime = cal.getTimeInMillis();

    final DataReadRequest readRequest = new DataReadRequest.Builder()
            .read(DataType.TYPE_STEP_COUNT_DELTA)
            .setTimeRange(startTime, endTime, TimeUnit.MILLISECONDS)
            .build();

    DataReadResult dataReadResult =
            Fitness.HistoryApi.readData(mGoogleApiFitnessClient, readRequest).await(1, TimeUnit.MINUTES);

    DataSet stepData = dataReadResult.getDataSet(DataType.TYPE_STEP_COUNT_DELTA);

    int totalSteps = 0;

    for (DataPoint dp : stepData.getDataPoints()) {
        for(Field field : dp.getDataType().getFields()) {
            int steps = dp.getValue(field).asInt();

            totalSteps += steps;

        }
    }}

2)

private void getStepsToday() {
    PendingResult<DailyTotalResult> result = Fitness.HistoryApi.readDailyTotal(mGoogleApiFitnessClient, DataType.TYPE_STEP_COUNT_DELTA);
    DailyTotalResult totalResult = result.await(30, TimeUnit.SECONDS);
    if (totalResult.getStatus().isSuccess()) {
        DataSet totalSet = totalResult.getTotal();
        int total = totalSet.isEmpty()
                ? 0
                : totalSet.getDataPoints().get(0).getValue(Field.FIELD_STEPS).asInt();
        publishTodaysStepData(total);
    } else {
        publishTodaysStepData(0);
    }
}

たとえば、最初のものを使用して27を取得し、2番目のものを使用して1425ステップを答えとして使用します。正しいもの (Google Fit アプリと比較した後) は 1425 である必要があります。したがって、最初のものはなぜ機能しないのですか?

先週からの手順を尋ねることで、私も同じ問題を抱えています。先週の歩数に方法 1 を使用することで、適切な日の歩数 (場合によっては正しい日も) を取得できることに気付きましたが、歩数の値が 50 を超える (と思います) 値は正しくありません。

誰もこの奇妙な行動に対する答えを持っていますか?

4

4 に答える 4

2

これを試して

public int getStepsCount(long startTime, long endTime) {
    DataSource ESTIMATED_STEP_DELTAS = new DataSource.Builder()
            .setDataType(DataType.TYPE_STEP_COUNT_DELTA)
            .setType(DataSource.TYPE_DERIVED)
            .setStreamName("estimated_steps")
            .setAppPackageName("com.google.android.gms").build();
    PendingResult<DataReadResult> pendingResult = Fitness.HistoryApi
            .readData(
                    fitnessClient,
                    new DataReadRequest.Builder()
                            .aggregate(ESTIMATED_STEP_DELTAS,
                                    DataType.AGGREGATE_STEP_COUNT_DELTA)
                            .bucketByTime(1, TimeUnit.HOURS)
                            .setTimeRange(startTime, endTime,
                                    TimeUnit.MILLISECONDS).build());
    int steps = 0;
    DataReadResult dataReadResult = pendingResult.await();
    if (dataReadResult.getBuckets().size() > 0) {
        //Log.e("TAG", "Number of returned buckets of DataSets is: "
                //+ dataReadResult.getBuckets().size());
        for (Bucket bucket : dataReadResult.getBuckets()) {
            List<DataSet> dataSets = bucket.getDataSets();
            for (DataSet dataSet : dataSets) {
                for (DataPoint dp : dataSet.getDataPoints()) {
                    for (Field field : dp.getDataType().getFields()) {
                        steps += dp.getValue(field).asInt();
                    }
                }
            }
        }
    } else if (dataReadResult.getDataSets().size() > 0) {
        for (DataSet dataSet : dataReadResult.getDataSets()) {
            for (DataPoint dp : dataSet.getDataPoints()) {
                for (Field field : dp.getDataType().getFields()) {
                    steps += dp.getValue(field).asInt();
                }
            }
        }
    }
    return steps;
}
于 2015-10-19T11:23:25.110 に答える
1

TYPE_STEP_COUNT_DELTAそれが正しいDataType要求であると確信していますか? ドキュメントから(強調):

データ型のcom.google.step_count.delta各データ ポイントは、最後の読み取り以降に実行された歩数を表します。このデータ型を使用する場合、各ステップは、ステップの直後の読み取りで一度だけ報告されます。一定期間のすべての値を合計することにより、その期間中の合計歩数を計算できます。

例として、ユーザーが 3 つの異なる測定値で合計 5 歩歩いた場合、各測定値の値は [1, 2, 2] となる可能性があります。

AGGREGATE_STEP_COUNT_DELTA代わりに使用すると、期待される結果が得られますか?

于 2015-09-08T12:30:37.480 に答える
1

readDailyTotal() と readData() からの歩数を等しくする必要がある場合は、dataSource を次のように指定する必要があります。

DataSource ESTIMATED_STEP_DELTAS = new DataSource.Builder()
            .setDataType(DataType.TYPE_STEP_COUNT_DELTA)
            .setType(DataSource.TYPE_DERIVED)
            .setStreamName("estimated_steps")
            .setAppPackageName("com.google.android.gms")
            .build();

このカウントは、Google FIT アプリからのカウントと一致します。 こちらをご覧ください

于 2016-02-23T07:28:55.020 に答える