Наборы данных GoogleFit не имеют точек данных - PullRequest
0 голосов
/ 03 ноября 2018

Я пытаюсь написать простое приложение, которое извлекает данные из GoogleFit на Android, но возвращаемые мной наборы данных не содержат никаких точек данных, даже если я добавил данные вручную в Google Fit . Мой код ниже можно найти ниже. Я запускаю это на эмуляторе Android, но у меня сложилось впечатление, что я все еще могу получать данные, потому что я использовал .enableServerQueries() в DataReadRequest.Builder.

MainActivity:

public void accessGoogleFit(GoogleSignInAccount account) {
    Fitness.getRecordingClient(this, account)
            .subscribe(DataType.TYPE_ACTIVITY_SAMPLES);

    Calendar cal = Calendar.getInstance();
    cal.setTime(new Date());
    long endTime = cal.getTimeInMillis();
    cal.add(Calendar.YEAR, -1);
    long startTime = cal.getTimeInMillis();

    GoogleApiClient client = new GoogleApiClient.Builder(this)
            .addApi(Fitness.HISTORY_API)
            .addScope(Fitness.SCOPE_ACTIVITY_READ)
            .build();
    client.connect();

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

    Fitness.getHistoryClient(this, GoogleSignIn.getLastSignedInAccount(this))
            .readData(readRequest)
            .addOnCompleteListener(new OnCompleteListener<DataReadResponse>() {
                @Override
                public void onComplete(@NonNull Task<DataReadResponse> task) {
                    System.out.println("Successful: " + task.isSuccessful());
                    if (task.isSuccessful()) {
                        List<DataSet> dataSets = task.getResult().getDataSets();
                        System.out.println("Size: " + dataSets.size());
                        for (DataSet set : dataSets) {
                            dumpDataSet(set);
                        }
                    }
                }
            });
}

private static void dumpDataSet(DataSet dataSet) {
    Log.i("GoogleFitData", "Data returned for Data type: " + dataSet.getDataType().getName());
    DateFormat dateFormat = getTimeInstance();

    for (DataPoint dp : dataSet.getDataPoints()) {
        Log.i("GoogleFitData", "Data point:");
        Log.i("GoogleFitData", "\tType: " + dp.getDataType().getName());
        Log.i("GoogleFitData", "\tStart: " + dateFormat.format(dp.getStartTime(TimeUnit.MILLISECONDS)));
        Log.i("GoogleFitData", "\tEnd: " + dateFormat.format(dp.getEndTime(TimeUnit.MILLISECONDS)));
        for (Field field : dp.getDataType().getFields()) {
            Log.i("GoogleFitData", "\tField: " + field.getName() + " Value: " + dp.getValue(field));
        }
    }
}

Я заметил в logcat, есть ошибки, связанные с тем, что мой файл ключа устройства не найден, но я не знаю, как это исправить. Я не уверен, что это связано, потому что запрос GoogleFit возвращается успешно, просто без каких-либо данных. Я включил GoogleFit API в Google Cloud Console и вставил в приложение сертификат и пакет отпечатков пальцев.

Logcat:

2018-11-03 15:17:31.749 26017-26446/com.google.android.gms.persistent W/GLSUser: [AppCertManager] IOException while requesting key: 
java.io.IOException: Invalid device key response.
    at hdw.a(:com.google.android.gms@12874026@12.8.74 (040700-204998136):12)
    at hdw.a(:com.google.android.gms@12874026@12.8.74 (040700-204998136):64)
    at hdw.a(:com.google.android.gms@12874026@12.8.74 (040700-204998136):20)
    at hdu.a(:com.google.android.gms@12874026@12.8.74 (040700-204998136):4)
    at hdr.a(:com.google.android.gms@12874026@12.8.74 (040700-204998136):2)
    at hdp.a(:com.google.android.gms@12874026@12.8.74 (040700-204998136):10)
    at hdp.a(:com.google.android.gms@12874026@12.8.74 (040700-204998136):22)
    at pfn.d(:com.google.android.gms@12874026@12.8.74 (040700-204998136):3)
    at pgg.a(:com.google.android.gms@12874026@12.8.74 (040700-204998136):9)
    at pgg.b(:com.google.android.gms@12874026@12.8.74 (040700-204998136):7)
    at pgg.a(:com.google.android.gms@12874026@12.8.74 (040700-204998136):23)
    at pgg.a(:com.google.android.gms@12874026@12.8.74 (040700-204998136):33)
    at utl.a(:com.google.android.gms@12874026@12.8.74 (040700-204998136):36)
    at vvf.a(:com.google.android.gms@12874026@12.8.74 (040700-204998136):56)
    at vsz.a(:com.google.android.gms@12874026@12.8.74 (040700-204998136):206)
    at vpw.a(:com.google.android.gms@12874026@12.8.74 (040700-204998136):30)
    at vpu.a(:com.google.android.gms@12874026@12.8.74 (040700-204998136):107)
    at vpp.run(:com.google.android.gms@12874026@12.8.74 (040700-204998136):10)
    at pmz.run(:com.google.android.gms@12874026@12.8.74 (040700-204998136):28)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1133)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:607)
    at ptb.run(:com.google.android.gms@12874026@12.8.74 (040700-204998136))
    at java.lang.Thread.run(Thread.java:761)
2018-11-03 15:17:31.749 26017-26446/com.google.android.gms.persistent W/GLSUser: [DeviceKeyStore] Cannot load key: Device key file not found.
2018-11-03 15:17:31.854 26017-26757/com.google.android.gms.persistent W/Conscrypt: Could not set socket write timeout: java.lang.reflect.InvocationTargetException
2018-11-03 15:17:31.854 26017-26757/com.google.android.gms.persistent W/Conscrypt:     at java.lang.reflect.Method.invoke(Native Method)
2018-11-03 15:17:31.854 26017-26757/com.google.android.gms.persistent W/Conscrypt:     at com.google.android.gms.org.conscrypt.Platform.setSocketWriteTimeout(:com.google.android.gms@12874026@12.8.74 (040700-204998136):13)
2018-11-03 15:17:31.854 26017-26757/com.google.android.gms.persistent W/Conscrypt: Caused by: android.system.ErrnoException: setsockopt failed: EBADF (Bad file descriptor)
2018-11-03 15:17:31.854 26017-26757/com.google.android.gms.persistent W/Conscrypt:     at libcore.io.Posix.setsockoptTimeval(Native Method)
2018-11-03 15:17:31.854 26017-26757/com.google.android.gms.persistent W/Conscrypt:     at libcore.io.ForwardingOs.setsockoptTimeval(ForwardingOs.java:157)
2018-11-03 15:17:31.915 26017-26757/com.google.android.gms.persistent W/Conscrypt: Could not set socket write timeout: java.lang.reflect.InvocationTargetException
2018-11-03 15:17:31.915 26017-26757/com.google.android.gms.persistent W/Conscrypt:     at java.lang.reflect.Method.invoke(Native Method)
2018-11-03 15:17:31.915 26017-26757/com.google.android.gms.persistent W/Conscrypt:     at com.google.android.gms.org.conscrypt.Platform.setSocketWriteTimeout(:com.google.android.gms@12874026@12.8.74 (040700-204998136):13)
2018-11-03 15:17:31.915 26017-26757/com.google.android.gms.persistent W/Conscrypt: Caused by: android.system.ErrnoException: setsockopt failed: EBADF (Bad file descriptor)
2018-11-03 15:17:31.915 26017-26757/com.google.android.gms.persistent W/Conscrypt:     at libcore.io.Posix.setsockoptTimeval(Native Method)
2018-11-03 15:17:31.915 26017-26757/com.google.android.gms.persistent W/Conscrypt:     at libcore.io.ForwardingOs.setsockoptTimeval(ForwardingOs.java:157)
2018-11-03 15:17:31.992 2776-2776/com.testdatapull.testdatapull I/System.out: Successful: true
2018-11-03 15:17:31.993 2776-2776/com.testdatapull.testdatapull I/System.out: Size: 2
2018-11-03 15:17:31.993 2776-2776/com.testdatapull.testdatapull I/GoogleFitData: Data returned for Data type: com.google.step_count.delta
2018-11-03 15:17:31.993 2776-2776/com.testdatapull.testdatapull I/GoogleFitData: Data returned for Data type: com.google.activity.summary

Любой совет будет принят с благодарностью.

Спасибо

...