2014-11-12 9 views
7

Ich habe einen folgenden Code ich eine Liste der Benutzer-Aktivitäten von Google Fit abrufen bin mit:Wie wird der Paketname der App, die Daten in Google Fit eingefügt hat, richtig abgerufen?

public void getActivitiesData(Date from, Date till) { 
    DataReadRequest readRequest = new DataReadRequest.Builder() 
     .aggregate(DataType.TYPE_ACTIVITY_SEGMENT, DataType.AGGREGATE_ACTIVITY_SUMMARY) 
     .bucketByTime(1, TimeUnit.DAYS) 
     .setTimeRange(from.getTime(), till.getTime(), TimeUnit.MILLISECONDS) 
     .build(); 

    Fitness.HistoryApi.readData(apiClient, readRequest).setResultCallback(new com.google.android.gms.common.api.ResultCallback<DataReadResult>() { 
     @Override 
     public void onResult(DataReadResult dataReadResult) { 
      Status status = dataReadResult.getStatus(); 
      if (status.isSuccess()) { 

       for (Bucket bucket : dataReadResult.getBuckets()) { 
        if (!bucket.getDataSets().isEmpty()) { 
         DataSet dataSet = bucket.getDataSets().get(0); 
         String sourceAppPackageName = getSourceAppPackageNameFromDataSet(dataSet); 
         for (DataPoint dp : dataSet.getDataPoints()) { 
          for (Field field : dp.getDataType().getFields()) { 
           String fieldName = field.getName(); 
           if (fieldName != null && fieldName.equals("activity")) { 
            String type = FitnessActivities.getValue(dp); 
            Date from = new Date(dp.getStartTime(TimeUnit.MILLISECONDS)); 
            Date till = new Date(dp.getEndTime(TimeUnit.MILLISECONDS)); 

            // store retrieved values to the data object, omitted 
           } 
          } 
         } 
        } 
       } 
      } 
     } 
    }); 
} 

private static String getSourceAppPackageNameFromDataSet(DataSet dataSet) { 
    String result = null; 

    if (dataSet.getDataSource() != null) { 
     result = dataSet.getDataSource().getAppPackageName(); 
    } 

    return result; 
} 

Um Aktivitäten in Google Fit einzufügen, habe ich den Google Fit App und Runkeeper (gerade jetzt, diese verwenden Apps scheinen nur solche zu sein, die in Fit integriert sind.

Mein Code ruft diese Aktivitäten wie erwartet ab, jedoch gibt meine getSourceAppPackageNameFromDataSet()-Methode für jede Aktivität "com.google.android.gms" als Paketname zurück. Gemäß Data Attribution section in Google Fit documentation würde ich erwarten, dass die Methode einen Paketnamen von Runkeeper oder Google Fit zurückgibt, aber das passiert nicht.

Mache ich etwas schrecklich falsch, oder ist das ein Bug in Google Fit?

+0

ich beschäftigt bin Hinzufügen von Upload-Unterstützung in meiner android app. Da ich die Android-API nicht benutze, sondern die Rest-API verwende, kann ich nicht einmal den Paketnamen festlegen, so dass man sich bewusst sein muss, dass man immer einen bekommen möchte. Entschuldige keine Idee zu deinem spezifischen Problem. – Ifor

Antwort