谷歌适合每分钟步骤的请求

时间:2016-07-26 09:25:41

标签: android google-fit

我正在尝试阅读过去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 个答案:

答案 0 :(得分:1)

所以我使用相同的查询进行了 little 测试,发现了一些可能更适合深入探索的内容。

首先,我在您的代码中看到的一个问题是,您不是要求过去 5天的步数,而是 next 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的文档在这方面似乎没有给予太多帮助。但也许您可以为每个1天创建5个单独的请求,并将数据组合起来供您使用。一个请求似乎足够快,但我不确定使用多个请求与一个请求是否有任何后果(如果一个请求可行)。