如何解决心率查询返回空集
尝试使用 History api 从 google fit 访问我的 heartRate 数据。
登录和权限执行正确。
但查询是这里的真正问题。
数据点值似乎总是返回空。
public void setfitnessOption() {
fitnessOptions =
fitnessOptions.builder()
.addDataType(DataType.TYPE_HEART_RATE_BPM,fitnessOptions.ACCESS_READ)
.addDataType(DataType.AGGREGATE_HEART_RATE_SUMMARY,fitnessOptions.ACCESS_READ)
.build();
}
public void requestGoogleFitPermission() {
ActivityCompat.requestPermissions(this,new String[]{Manifest.permission.BODY_SENSORS },GOOGLE_FIT_PERMISSIONS_REQUEST_CODE);
GoogleSignInAccount account = GoogleSignIn.getAccountForExtension(this,fitnessOptions);
GoogleSignIn.requestPermissions(
this,GOOGLE_FIT_PERMISSIONS_REQUEST_CODE,account,fitnessOptions);
}
private Task<DataReadResponse> readHRHistoryData() {
DataReadRequest readRequest = queryHRfitnessData();
return fitness.getHistoryClient(this,GoogleSignIn.getLastSignedInAccount(this))
.readData(readRequest)
.addOnSuccessListener(
new OnSuccessListener<DataReadResponse>() {
@Override
public void onSuccess(DataReadResponse dataReadResponse) {
Log.v(TAG,"Success" + dataReadResponse);
printData(dataReadResponse);
}
})
.addOnFailureListener(
new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
Log.v(TAG,"Failture");
}
});
}
public static DataReadRequest queryHRfitnessData() {
Calendar cal = Calendar.getInstance();
Calendar cal1 = Calendar.getInstance();
Date Now = new Date();
cal1.setTime(Now);
long endTime = cal1.getTimeInMillis();
cal.add(Calendar.DATE,-1);
long startTime = cal.getTimeInMillis();
java.text.DateFormat dateFormat = DateFormat.getDateInstance();
DataReadRequest readRequest =
new DataReadRequest.Builder()
.aggregate(DataType.TYPE_HEART_RATE_BPM,DataType.AGGREGATE_HEART_RATE_SUMMARY)
.setTimeRange(startTime,endTime,TimeUnit.MILLISECONDS)
.bucketByTime(1,TimeUnit.DAYS)
.build();
return readRequest;
}
public static void printData(DataReadResponse dataReadResult) {
Log.v(TAG,"Number of returned buckets of DataSets is: " + dataReadResult.getBuckets().size());
if (dataReadResult.getBuckets().size() > 0) {
for (Bucket bucket : dataReadResult.getBuckets()) {
List<DataSet> dataSets = bucket.getDataSets();
Log.v(TAG,"Datasets: " + dataSets);
for (DataSet dataSet : dataSets) {
dumpdataSet(dataSet);
}
}
} else if (dataReadResult.getDataSets().size() > 0) {
System.out.print("Number of returned DataSets is: " + dataReadResult.getDataSets().size());
for (DataSet dataSet : dataReadResult.getDataSets()) {
dumpdataSet(dataSet);
}
}
}
private static void dumpdataSet(DataSet dataSet) {
Log.v(TAG,"Name: " + dataSet.getDataType().getName());
DateFormat dateFormat = DateFormat.getTimeInstance();
Log.v(TAG,"Fields: " + dataSet.getDataSource().getDataType().getFields());
Log.v(TAG,"Data Point Values :" + dataSet.getDataPoints());
for (DataPoint dp : dataSet.getDataPoints()) {
Log.v(TAG,"Data Point:");
Log.v(TAG,"Type: " + dataSet.getDataType().getName());
Log.v(TAG,"Start: " + dateFormat.format(dp.getStartTime(TimeUnit.MILLISECONDS)));
Log.v(TAG,"End: " + dateFormat.format(dp.getEndTime(TimeUnit.MILLISECONDS)));
for (Field field : dp.getDataType().getFields()) {
Log.v(TAG,"Field: " + field.getName() + ",Value : " + dp.getValue(field).asFloat());
}
}
}
日志:
V/nativehealth: Successcom.google.android.gms.fitness.result.DataReadResponse@61ae9a7
Number of returned buckets of DataSets is: 1
Datasets: [DataSet{d:heart_rate.summary:gms:aggregated []}]
Name: com.google.heart_rate.summary
V/nativehealth: Fields: [average(f),max(f),min(f)]
Data Point Values :[]
我在我的 google fit 应用上维护了心率数据。然而我的代码返回空集。 我在这里错过了什么??
更新:
我尝试使用 HistoryClient 插入数据(HeartRate = 81),然后尝试读取这些数据。它工作得很好。
日志:
Datasets: [DataSet{d:heart_rate.summary:gms:aggregated [RawDataPoint{[81.0,81.0,81.0]@[1612494973714000000,1612494973714000000](0,1)}]}]
Name: com.google.heart_rate.summary
V/nativehealth: Fields: [average(f),min(f)]
Data Point Values :[DataPoint{[81.0,1612494973714000000,raw=0](d:heart_rate.summary:gms:aggregated r:heart_rate.bpm:com.nativehealth:)}]
Data Point:
Type: com.google.heart_rate.summary
V/nativehealth: Start: 11:16:13 AM
V/nativehealth: End: 11:16:13 AM
Field: average,Value : 81.0
Field: max,Value : 81.0
Field: min,Value : 81.0
但是我在我的 google fit 应用中看不到这些数据!!!这整个过程太混乱了。任何人都请帮忙!
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。