long startDateInMS = dateUTCToMillisecs(startDate);
long endDateInMS = dateUTCToMillisecs(endDate);
DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSXXX");
dateFormat.setTimeZone(TimeZone.getTimeZone("UTC"));
WritableArray results = Arguments.createArray();
DataSource DS = new DataSource.Builder()
.setDataType(DataType.TYPE_HEART_RATE_BPM)
.setType(DataSource.TYPE_DERIVED)
.setStreamName("heart_rate")
.setAppPackageName("com.google.android.gms")
.build();
final DataReadRequest req = new DataReadRequest.Builder()
.aggregate(DS, DataType.AGGREGATE_HEART_RATE_SUMMARY)
.bucketByTime(1, TimeUnit.DAYS)
.setTimeRange(startDateInMS, endDateInMS, TimeUnit.MILLISECONDS)
.build();
GoogleSignInAccount googleSignInAccount = GoogleSignIn.getLastSignedInAccount(context);
Fitness.getHistoryClient(context, googleSignInAccount).readData(req).addOnSuccessListener(new OnSuccessListener<DataReadResponse>() {
@Override
public void onSuccess(DataReadResponse dataReadResponse) {
}
}).addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
}
}).addOnCompleteListener(new OnCompleteListener<DataReadResponse>() {
@Override
public void onComplete(@NonNull Task<DataReadResponse> task) {
}
});
查询正在成功执行,但即使我在GoogleFit应用程序中有心率值,aggregated_heart_data
数组也是空的
**我开启了BODY_SENSORS权限和位置权限**
发布于 2020-01-15 21:31:10
看起来您设置的包名称不正确。它是数据提供程序包名称。从您的数据请求中删除包名。
您的数据请求源应该如下所示
DataSource DS = new DataSource.Builder()
.setDataType(DataType.TYPE_HEART_RATE_BPM)
.setType(DataSource.TYPE_DERIVED)
.build();
发布于 2020-09-07 22:10:01
我终于找到了一种聚合心率数据的方法(它可以在我的手机上运行,但不能在Android Studio的Emulator上运行,所以请记住这一点。首先添加心率和聚合心率的数据类型:
FitnessOptions fitnessOptions =
FitnessOptions.builder()
.addDataType(DataType.TYPE_HEART_RATE_BPM, FitnessOptions.ACCESS_WRITE)
.addDataType(DataType.AGGREGATE_HEART_RATE_SUMMARY,FitnessOptions.ACCESS_WRITE)
.build();
然后使FitnessQuery函数如下所示:
private fun queryFitnessData2(): DataReadRequest {
// [START build_read_data_request]
// Setting a start and end date using a range of 1 week before this moment.
val calendar = Calendar.getInstance(TimeZone.getTimeZone("UTC"))
val now = Date()
calendar.time = now
val endTime = calendar.timeInMillis
calendar.add(Calendar.WEEK_OF_YEAR, -1)
val startTime = calendar.timeInMillis
Log.i(TAG, "Range Start: ${dateFormat.format(startTime)}")
Log.i(TAG, "Range End: ${dateFormat.format(endTime)}")
return DataReadRequest.Builder()
.enableServerQueries()
.bucketByTime(1, TimeUnit.DAYS)
.setTimeRange(startTime, endTime, TimeUnit.MILLISECONDS)
.aggregate(DataType.TYPE_HEART_RATE_BPM, DataType.AGGREGATE_HEART_RATE_SUMMARY)
.build();
}
最后,将数据集转储到存储桶中,其中每个存储桶对应一天:
private fun printData(dataReadResult: DataReadResponse) {
// [START parse_read_data_result]
// If the DataReadRequest object specified aggregated data, dataReadResult will be returned
// as buckets containing DataSets, instead of just DataSets.
if (dataReadResult.buckets.isNotEmpty()) {
Log.i(TAG, "Number of returned buckets of DataSets is: " + dataReadResult.buckets.size)
for (i in 0 until dataReadResult.buckets.size) {
for (j in 0 until dataReadResult.buckets[i].dataSets.size) {
dumpDataSet(dataReadResult.buckets[i].dataSets[j]);
}
}
} else if (dataReadResult.dataSets.isNotEmpty()) {
Log.i(TAG, "Number of returned DataSets is: " + dataReadResult.dataSets.size)
dataReadResult.dataSets.forEach { dumpDataSet(it) }
}
// [END parse_read_data_result]
}
// [START parse_dataset]
private fun dumpDataSet(dataSet: DataSet) {
Log.i(TAG, "Data returned for Data type: ${dataSet.dataType.name}")
val dateFormat: DateFormat = getTimeInstance()
for (dp:DataPoint in dataSet.dataPoints) {
Log.i(TAG, "\tStart: " + dateFormat.format(dp.getStartTime(TimeUnit.MILLISECONDS)));
Log.i(TAG, "\tEnd: " + dateFormat.format(dp.getEndTime(TimeUnit.MILLISECONDS)));
Log.i(TAG, "\tType: " + dp.dataType.name);
Log.i(TAG, "TEST")
for (field in dp.dataType.fields) {
Log.i(TAG, "TEST4")
val fieldValue = "Field name: " + field.name.toString() + ", value: " + dp.getValue(field).asFloat();
Log.i(TAG, fieldValue)
}
}
}
希望过了这么久还能帮上忙。
https://stackoverflow.com/questions/59745172
复制相似问题