2016-07-26 27 views
0

我正在尝试读取最近5天的每分钟数据步数,但它仅返回每分钟1天的步数。以下是我用来获取每分钟最后5天步骤的代码。谷歌适合每分钟步骤的请求

  1. 最近5天的步骤,每分钟
  2. 步骤

    private void displayMinData() { 
        Calendar cal = Calendar.getInstance(); 
        Date now = new Date(); 
        cal.setTime(now); 
        long endTime = cal.getTimeInMillis(); 
    
        int lastSyncDays=5; 
        cal.add(Calendar.DAY_OF_YEAR, lastSyncDays); 
        long startTime = cal.getTimeInMillis(); 
        try { 
         String strEndTime = millisToHMS(endTime); 
         String strStartTime= millisToHMS(startTime); 
        } 
        catch(ParseException pe) 
        { 
        } 
        catch(Exception e) 
        { 
        } 
    
        java.text.DateFormat dateFormat = DateFormat.getDateInstance(); 
        Log.e("History", "Range Start: " + dateFormat.format(startTime)); 
        Log.e("History", "Range End: " + dateFormat.format(endTime)); 
    
        //Check how many steps were walked and recorded in the last 7 days 
        DataReadRequest readRequest = new DataReadRequest.Builder() 
          .aggregate(DataType.TYPE_STEP_COUNT_DELTA, DataType.AGGREGATE_STEP_COUNT_DELTA) 
          .bucketByTime(1, TimeUnit.MINUTES) 
          .setTimeRange(startTime, endTime, TimeUnit.MILLISECONDS) 
          .build(); 
    
        DataReadResult dataReadResult = Fitness.HistoryApi.readData(mGoogleApiClient, readRequest).await(1, TimeUnit.MINUTES); 
    
        //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); 
          } 
         } 
        } 
        //Used for non-aggregated data 
        else if (dataReadResult.getDataSets().size() > 0) { 
         Log.e("History", "Number of returned DataSets: " + dataReadResult.getDataSets().size()); 
         for (DataSet dataSet : dataReadResult.getDataSets()) { 
          showDataSet(dataSet); 
         } 
        } 
    } 
    

回答

1

所以我做了测试使用相同的查询,并发现了一些东西,可能会善于发掘更深入。

首先一个问题,我在你的代码中看到的是,你是不是要求在过去 5天步数,而是下一个 5天。您将当前时间添加5天,而不是减去它。

int lastSyncDays=5; 
cal.add(Calendar.DAY_OF_YEAR, lastSyncDays); 

应该改为

int lastSyncDays=5; 
cal.add(Calendar.DAY_OF_YEAR, -lastSyncDays); 

在我的测试看来,数据可以查询量是有限的。当要求在过去一天中每分钟的累计步数时,结果会很快恢复,比1分钟的等待时间早得多。我尝试了2天,并收到请求超时。我尝试了2天,等待5分钟,请求仍然超时,所以我不认为这是问题。

我试过的另一件事是2天的累计步数值,但是2分钟时间段而不是1分钟。结果和原来的1天请求一样快。我再次尝试了4天的请求,使用了4分钟的桶,结果是一样的。

我不知道我们可以查询的确切范围,Google的文档在这方面似乎没有太多帮助。但是也许你可以创建5个独立的请求,每个请求为1天,并将这些数据结合起来用于你的用途一个请求似乎足够快,但我不确定是否会对使用多个请求(如果有一个请求有效)产生任何影响。