2016-07-26 13 views
0

Ich versuche, die Schritte pro Minute Daten für die letzten 5 Tage zu lesen, aber es gibt nur 1 Tag Schritte pro Minute zurück. Unten ist der Code, den ich verwende, um die letzten 5 Tagesschritte pro Minute zu erhalten.Google Fit-Anfrage für pro Minute Schritte

  1. Letzte 5 Tage Schritte
  2. Schritte pro Minute

    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); 
         } 
        } 
    } 
    

Antwort

1

So habe ich eine wenig Tests mit der gleichen Abfrage und fand einige Dinge, die wahrscheinlich gut erkunden würde tiefer gehend.

Zuerst ein Problem, das ich in Ihrem Code zu sehen ist, dass Sie nicht für die Vergangenheit 5 Tage für die Schrittzahl fragen, sondern die nächsten 5 Tage. Sie fügen der aktuellen Zeit 5 Tage hinzu, subtrahieren Sie sie nicht.

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

Es statt

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

In meinen Tests sollte so scheint es, dass die Menge an Daten, die Sie begrenzt abfragen. Bei der Abfrage der kumulativen Schrittzahl pro Minute im letzten Tag kamen die Ergebnisse schnell zurück, viel früher als die Wartezeit von 1 Minute. Ich habe 2 Tage ausprobiert und bekam eine Anfrage Timeout. Ich habe 2 Tage mit einer Wartezeit von 5 Minuten probiert und die Anfrage ist immer noch abgelaufen, also glaube ich nicht, dass das das Problem ist.

Die andere Sache, die ich versuchte, war 2 Tage im Wert von kumulativen Schritt zählt, aber mit 2 Minuten Eimer statt 1 Minute. Die Ergebnisse kamen genauso schnell zurück wie die ursprüngliche 1-Tages-Anfrage. Ich versuchte es erneut mit einer Anfrage für 4 Tage, mit 4 Minuten Eimer und das Ergebnis war das gleiche.

Ich weiß nicht genau die Grenzen dessen, was wir abfragen können, und die Dokumentation von Google scheint in dieser Hinsicht keine große Hilfe zu bieten. Aber vielleicht können Sie 5 separate Anfragen für jeweils 1 Tag erstellen und die Daten für Ihre Zwecke kombinieren. Eine Anfrage scheint schnell genug zu sein, aber ich bin mir nicht sicher, ob es Konsequenzen für die Verwendung mehrerer Anfragen gegenüber einer gibt (wenn eine Anfrage funktionieren würde).