Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google fit在Android上一小时内获取运动数据_Android_Google Fit_Google Fit Sdk - Fatal编程技术网

Google fit在Android上一小时内获取运动数据

Google fit在Android上一小时内获取运动数据,android,google-fit,google-fit-sdk,Android,Google Fit,Google Fit Sdk,我目前正在开发一个与健身数据相关的Android应用程序,对于该应用程序,我需要获得步数、心率、,睡眠时间和运动数据。我需要每小时获取数据,所以我使用bucketByTime作为1小时,使用AGGREGATE_ACTIVITY_SUMMARY获取1小时内所有活动的活动摘要数据。我也可以从中筛选运动数据,但这不实用,因为API中列出了太多的运动类型。我正在寻找替代解决方案 DataReadRequest readRequest = new DataReadRequest.Build

我目前正在开发一个与健身数据相关的Android应用程序,对于该应用程序,我需要获得步数、心率、,睡眠时间和运动数据。我需要每小时获取数据,所以我使用bucketByTime作为1小时,使用AGGREGATE_ACTIVITY_SUMMARY获取1小时内所有活动的活动摘要数据。我也可以从中筛选运动数据,但这不实用,因为API中列出了太多的运动类型。我正在寻找替代解决方案

        DataReadRequest readRequest = new DataReadRequest.Builder()
                .aggregate(DataType.TYPE_STEP_COUNT_DELTA,
                        DataType.AGGREGATE_STEP_COUNT_DELTA)
                .aggregate(DataType.TYPE_HEART_RATE_BPM, DataType.AGGREGATE_HEART_RATE_SUMMARY)
                .aggregate(DataType.TYPE_ACTIVITY_SEGMENT, DataType.AGGREGATE_ACTIVITY_SUMMARY)
                .bucketByTime(1, TimeUnit.HOURS)
                .setTimeRange(starttime, endtime, TimeUnit.MILLISECONDS)
                .build();
        DataReadResult dataReadResult = Fitness.HistoryApi.readData(mClient, readRequest).await(1, TimeUnit.MINUTES);

        //Used for aggregated data
        if (dataReadResult.getBuckets().size() > 0) {
            Log.i("History", "Number of buckets: " + dataReadResult.getBuckets().size());
            for (Bucket bucket : dataReadResult.getBuckets()) {
                List<DataSet> dataSets = bucket.getDataSets();
                for (DataSet dataSet : dataSets) {
                    showDataSet(dataSet);
                }
            }
        }


        return null;
    }
}

private void readData() {
    new VerifyDataTask().execute();
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the main; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.main, menu);
    return true;
}
    private void showDataSet(DataSet dataSet) {
        Log.e("History", "Data returned for Data type: " + dataSet.getDataType().getName());
        DateFormat dateFormat = DateFormat.getDateInstance();
        DateFormat timeFormat = DateFormat.getTimeInstance();
        String sleepHours = "0";

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

                if(dp.getOriginalDataSource().getAppPackageName().toString().contains("sleep") && field.getName().contains("duration")){
                    Value value = dp.getValue(field);
                    long h = TimeUnit.MILLISECONDS.toHours(value.asInt());
                    long m =TimeUnit.MILLISECONDS.toMinutes(value.asInt());
                    m = m - (h*60);
                    sleepHours  =h +" h  " + m + " m";
                    Log.i(TAG, "\tField: Sleep duration : " + sleepHours);

                }

                Log.i("History", "\tField: " + field.getName() +
                        " Value: " + dp.getValue(field));
            }
        }

    }
DataReadRequest=newdatareadrequest.Builder()
.aggregate(数据类型.TYPE\u步骤\u计数\u增量,
数据类型。聚合(步骤计数增量)
.aggregate(数据类型.TYPE\u心率\u BPM,数据类型.aggregate\u心率\u摘要)
.aggregate(数据类型.TYPE\u活动\u段,数据类型.aggregate\u活动\u摘要)
.bucketByTime(1,时间单位:小时)
.setTimeRange(开始时间、结束时间、时间单位.毫秒)
.build();
DataReadResult DataReadResult=Fitness.HistoryApi.readData(mClient,readRequest).wait(1,TimeUnit.MINUTES);
//用于聚合数据
如果(dataReadResult.GetBucket().size()>0){
Log.i(“历史记录”,“存储桶数:”+dataReadResult.GetBucket().size());
for(Bucket:dataReadResult.getbucket()){
List dataSets=bucket.getDataSets();
用于(数据集:数据集){
showDataSet(数据集);
}
}
}
返回null;
}
}
私有void readData(){
新建VerifyDataTask().execute();
}
@凌驾
公共布尔onCreateOptions菜单(菜单){
//为主管道充气;如果存在,则会将项目添加到操作栏中。
getMenuInflater().充气(R.menu.main,menu);
返回true;
}
私有void showDataSet(数据集){
Log.e(“历史记录”,“为数据类型返回的数据:”+dataSet.getDataType().getName());
DateFormat DateFormat=DateFormat.getDateInstance();
DateFormat timeFormat=DateFormat.getTimeInstance();
字符串sleepHours=“0”;
对于(DataPoint dp:dataSet.getDataPoints()){
Log.i(“历史”,“数据点:”);
Log.i(“历史记录”,“\t类型:”+dp.getDataType().getName());
Log.i(“History”,“\t开始:”+dateFormat.format(dp.getStartTime(TimeUnit.ms))+“+timeFormat.format(dp.getStartTime(TimeUnit.ms)));
Log.i(“History”、“\trend:”+dateFormat.format(dp.getEndTime(TimeUnit.millides))+“+timeFormat.format(dp.getStartTime(TimeUnit.millides)));
for(字段:dp.getDataType().getFields()){
if(dp.getOriginalDataSource().getAppPackageName().toString()包含(“睡眠”)和&field.getName()包含(“持续时间”){
值=dp.getValue(字段);
long h=时间单位.millides.toHours(value.asInt());
long m=TimeUnit.millides.toMinutes(value.asInt());
m=m-(h*60);
睡眠时间=h+“h”+m+“m”;
Log.i(标记“\t字段:睡眠持续时间:”+睡眠时间);
}
Log.i(“历史记录”,“\t字段:”+field.getName()+
“值:”+dp.getValue(字段));
}
}
}
关于如何读取详细数据和聚合数据,您可以参考本手册。在示例代码中,您需要在此时刻之前使用1周的范围设置开始和结束日期<代码>计算添加(日历周,每年,-1)。如果您希望只有1小时,请使用
cal.add(Calendar.hour\u OF_DAY,-1)。创建实例后,使用[
HistoryApi.readData()
](,com.google.android.gms.fitness.request.DataReadRequest))方法并同步等待或提供回调方法来处理健身历史记录中的数据