Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/tfs/3.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)获取最近10天的数据_Android_Google Fit - Fatal编程技术网

Google Fit(Android)获取最近10天的数据

Google Fit(Android)获取最近10天的数据,android,google-fit,Android,Google Fit,我试图从谷歌安卓(6.0)手机上获取过去10天的数据。它正确地返回当天的数据,但当我试图获取昨天或之前的数据时,它会返回随机或错误的数据 // get the start and end date of the urrent mobile Calendar cal = Calendar.getInstance(); Date now = new Date(); cal.setTime(now); long endTime = cal.getTimeInMi

我试图从谷歌安卓(6.0)手机上获取过去10天的数据。它正确地返回当天的数据,但当我试图获取昨天或之前的数据时,它会返回随机或错误的数据

    // get the start and end date of the urrent mobile
    Calendar cal = Calendar.getInstance();
    Date now = new Date();
    cal.setTime(now);
    long endTime = cal.getTimeInMillis();
    cal.add(Calendar.DAY_OF_YEAR, -10);
    long startTime = cal.getTimeInMillis();
    java.text.DateFormat dateFormat = DateFormat.getDateInstance();

    //-------------steps-------------------------------
    //code to get last 10 days steps
    DataReadRequest readRequest = new DataReadRequest.Builder()
    .aggregate(DataType.TYPE_STEP_COUNT_DELTA, DataType.AGGREGATE_STEP_COUNT_DELTA)
    .bucketByTime(1, TimeUnit.DAYS)
    .setTimeRange(startTime, endTime, TimeUnit.MILLISECONDS)
    .build();

    DataReadResult dataReadResult=null;
    dataReadResult = Fitness.HistoryApi.readData(mGoogleApiClient, readRequest).await(1, TimeUnit.MINUTES);

    // display data
    //Used for aggregated data
    if (dataReadResult.getBuckets().size() > 0) {
        Log.e("History", "Number of buckets: " + dataReadResult.getBuckets().size());
        for (Bucket bucket : dataReadResult.getBuckets()) {
        List<DataSet> dataSets = bucket.getDataSets();
        for (DataSet dataSet : dataSets) {
            showDataSet(dataSet);
        }
        }
    }
    else if (dataReadResult.getDataSets().size() > 0) //Used for non-aggregated data
    {
        Log.e("History", "Number of returned DataSets: " + dataReadResult.getDataSets().size());
        for (DataSet dataSet : dataReadResult.getDataSets()) {
        showDataSet(dataSet);
        }
    }
//获取当前手机的开始和结束日期
Calendar cal=Calendar.getInstance();
现在日期=新日期();
校准设定时间(现在);
long-endTime=cal.getTimeInMillis();
cal.add(日历日,每年-10);
long startTime=cal.getTimeInMillis();
java.text.DateFormat DateFormat=DateFormat.getDateInstance();
//-------------台阶-------------------------------
//获取最后10天步骤的代码
DataReadRequest=newDataReadRequest.Builder()
.aggregate(DataType.TYPE\u STEP\u COUNT\u DELTA,DataType.aggregate\u STEP\u COUNT\u DELTA)
.bucketByTime(1,时间单位:天)
.setTimeRange(开始时间、结束时间、时间单位.毫秒)
.build();
DataReadResult DataReadResult=null;
dataReadResult=Fitness.HistoryApi.readData(mGoogleApiClient,readRequest).wait(1,TimeUnit.MINUTES);
//显示数据
//用于聚合数据
如果(dataReadResult.GetBucket().size()>0){
Log.e(“历史记录”,“存储桶数:”+dataReadResult.GetBucket().size());
for(Bucket:dataReadResult.getbucket()){
List dataSets=bucket.getDataSets();
用于(数据集:数据集){
showDataSet(数据集);
}
}
}
else if(dataReadResult.getDataSets().size()>0)//用于非聚合数据
{
Log.e(“历史记录”,“返回数据集的数量:”+dataReadResult.getDataSets().size());
对于(数据集数据集:dataReadResult.getDataSets()){
showDataSet(数据集);
}
}
请帮助我了解如何获得前几天的步骤。或者为什么我得到了错误的数据。
谢谢

将自定义数据源用作:

DataSource ESTIMATED_STEP_DELTAS = new DataSource.Builder()
            .setDataType(DataType.TYPE_STEP_COUNT_DELTA)
            .setType(DataSource.TYPE_DERIVED)
            .setStreamName("estimated_steps")
            .setAppPackageName("com.google.android.gms")
            .build();
并将其作为

DataReadRequest readRequest = new DataReadRequest.Builder()
            .aggregate(ESTIMATED_STEP_DELTAS, DataType.AGGREGATE_STEP_COUNT_DELTA)
            .bucketByActivityType(1, TimeUnit.SECONDS)
            .setTimeRange(startTime, endTime, TimeUnit.MILLISECONDS)
            .build();

通过这种方式,您将获得Google Fit应用程序中显示的准确数据或“衍生”数据。

使用自定义数据源:

DataSource ESTIMATED_STEP_DELTAS = new DataSource.Builder()
            .setDataType(DataType.TYPE_STEP_COUNT_DELTA)
            .setType(DataSource.TYPE_DERIVED)
            .setStreamName("estimated_steps")
            .setAppPackageName("com.google.android.gms")
            .build();
并将其作为

DataReadRequest readRequest = new DataReadRequest.Builder()
            .aggregate(ESTIMATED_STEP_DELTAS, DataType.AGGREGATE_STEP_COUNT_DELTA)
            .bucketByActivityType(1, TimeUnit.SECONDS)
            .setTimeRange(startTime, endTime, TimeUnit.MILLISECONDS)
            .build();

通过这种方式,您将获得Google Fit应用程序中显示的准确或“衍生”数据。

您的代码唯一的问题是,您的时间跨度并非如预期的那样在00:00:00开始,而是在与当前时间的24小时偏移处开始。您可以轻松验证,如果对从dataReadResult.GetBucket()接收的Bucket调用getStartTime()…

则代码的唯一问题是时间跨度并非如预期的那样在00:00:00开始,而是在与当前时间的24小时偏移处开始。如果对从dataReadResult.GetBucket()接收的Bucket调用getStartTime(),则可以轻松验证

要获取步骤,请执行以下操作:

公共任务googlefitspes(){

DataReadRequest=DataReadRequest();
返回Fitness.getHistoryClient(getActivity()、GoogleSignIn.getLastSignedAccount(getActivity()))
.readData(readRequest)
.addOnSuccessListener(新的OnSuccessListener(){
@凌驾
成功时公共无效(DataReadResponse DataReadResponse){
if(dataReadResponse.getbucket()!=null){
如果(!dataReadResponse.GetBucket().isEmpty()){
List bucketList=dataReadResponse.getbucket();
if(bucketList!=null){
如果(!bucketList.isEmpty()){
List dataSetList=bucketList.get(0.getDataSets();
if(dataSetList!=null){
如果(!dataSetList.isEmpty()){
for(字段:dataSetList.get(0).getDataPoints().get(0).getDataType().getFields()){
GoogleFitSteps=Double.parseDouble(dataSetList.get(0).getDataPoints().get(0).getValue(field).toString());
}
}
}
}
}
}
}
}
}).addOnFailureListener(新的OnFailureListener(){
@凌驾
public void onFailure(@NonNull异常e){
}
});
}
这可能会有帮助!。如果有什么东西可以缩短它,请更正它

要获取步骤,请执行以下操作:

公共任务googlefitspes(){

DataReadRequest=DataReadRequest();
返回Fitness.getHistoryClient(getActivity()、GoogleSignIn.getLastSignedAccount(getActivity()))
.readData(readRequest)
.addOnSuccessListener(新的OnSuccessListener(){
@凌驾
成功时公共无效(DataReadResponse DataReadResponse){
if(dataReadResponse.getbucket()!=null){
如果(!dataReadResponse.GetBucket().isEmpty()){
List bucketList=dataReadResponse.getbucket();
if(bucketList!=null){
如果(!bucketList.isEmpty()){
List dataSetList=bucketList.get(0.getDataSets();
if(dataSetList!=null){
如果(!dataSetList.isEmpty()){
for(字段:dataSetList.get(0).getDataPoints().get(0).getDataType().getFields()){
GoogleFitSteps=Double.parseDouble(dataSetList.get(0).getDataPoints().get(0).getValue(field).toString());
}
}
}
}