我正在尝试编写一个简单的应用程序,该应用程序可从Android上的GoogleFit中提取数据,但是即使我在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请求成功返回,只是没有任何数据。我已经在Google Cloud Console中启用了GoogleFit API,并放入了我的应用指纹证书和软件包。
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
任何建议将不胜感激。
谢谢