微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

心率查询返回空集

如何解决心率查询返回空集

尝试使用 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 举报,一经查实,本站将立刻删除。