Шаги Получение данных из истории API не соответствует Google Fit - PullRequest
0 голосов
/ 03 ноября 2018

Я хочу, чтобы в моем приложении учитывалось количество шагов Google Fit, для этого я использую API истории, предоставленный Google. Я обнаружил, что шаги, полученные из истории, API не совпадают с Google Fit, даже если я использовал тот же код, предоставленный Google. Ниже мой код.

  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 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();

        DataReadRequest readRequest = new DataReadRequest.Builder()
                .aggregate(ESTIMATED_STEP_DELTAS, DataType.AGGREGATE_STEP_COUNT_DELTA)
                .aggregate(DataType.TYPE_DISTANCE_DELTA, DataType.AGGREGATE_DISTANCE_DELTA)
                .aggregate(DataType.TYPE_ACTIVITY_SEGMENT, DataType.AGGREGATE_ACTIVITY_SUMMARY)
                .bucketByTime(1, TimeUnit.DAYS)
                .setTimeRange(startTime, endTime, TimeUnit.MILLISECONDS)
                .build();

  Task<DataReadResponse> result = Fitness.getHistoryClient(getApplicationContext(),
                GoogleSignIn.getLastSignedInAccount(getApplicationContext())).readData(readRequest);

Буду очень признателен за любую помощь, я застрял в этой проблеме в течение длительного времени и даже не нашел ни одного подходящего учебника от Google.

Ответы [ 2 ]

0 голосов
/ 19 ноября 2018

Я использую исторический API в своем приложении и сравнил результаты с приложением Google FIT, они совершенно одинаковые.

val c = GregorianCalendar()
    c.set(Calendar.HOUR_OF_DAY, 0) //anything 0 - 23
    c.set(Calendar.MINUTE, 0)
    c.set(Calendar.SECOND, 0)
    var endTime = /*date.time + dayInMS*/(getCurrentUTCDate()*1000)
    var startTime = (ConfigVariable.appLastUpdateTime*1000) //converting last updated data from second to MS
    val readRequest = DataReadRequest.Builder()
            .aggregate(DataType.TYPE_STEP_COUNT_DELTA, DataType.AGGREGATE_STEP_COUNT_DELTA)
            .bucketByTime(1  , TimeUnit.DAYS)
            .setTimeRange(startTime, endTime, TimeUnit.MILLISECONDS)
            .build()
    val pendingResult = Fitness.HistoryApi.readData(mGoogleApiClient,readRequest)
    pendingResult.setResultCallback(this)
0 голосов
/ 18 ноября 2018

см. FAQ , в котором буквально объясняется поведение, которое вы описываете.

это, возможно, самое близкое, что можно получить; при условии, что на устройстве установлены последние Play Services:

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();

DataReadRequest readRequest = new DataReadRequest.Builder()
   .aggregate(ESTIMATED_STEP_DELTAS, DataType.AGGREGATE_STEP_COUNT_DELTA)
   .aggregate(DataType.TYPE_DISTANCE_DELTA, DataType.AGGREGATE_DISTANCE_DELTA)
   .aggregate(DataType.TYPE_CALORIES_EXPENDED, DataType.AGGREGATE_CALORIES_EXPENDED)
   .aggregate(DataType.TYPE_ACTIVITY_SEGMENT, DataType.AGGREGATE_ACTIVITY_SUMMARY)
   .bucketByTime(1, TimeUnit.DAYS)
   .setTimeRange(startTime, endTime, TimeUnit.MILLISECONDS)
   .build();

это то же самое, за исключением TYPE_CALORIES_EXPENDED. Кроме того, вы можете записать свои собственные сессий - которые не просто estimated_steps, но имеют уникальный идентификатор сеанса.

...