Как правильно получить имя пакета приложения, которое вставляло данные в Google Fit?

У меня есть следующий код, который я использую, чтобы получить список действий пользователя из Google Fit:

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

Чтобы вставлять действия в Google Fit, я использовал приложение Google Fit и Runkeeper (сейчас эти приложения, похоже, только те, которые интегрированы с Fit).

Однако мой код извлекает эти действия, как и ожидалось, однако для каждого действия метод getSourceAppPackageNameFromDataSet() возвращает "com.google.android.gms" в качестве имени пакета. Согласно разделу Data Attribution в документации Google Fit , я ожидаю, что метод вернет имя пакета Runkeeper или Google Fit, но этого не произойдет.

Я делаю что-то ужасно неправильно, или это ошибка в Google Fit?

DataPoint.getOriginalDataSource().getAppPackageName() выполнит трюк. Он возвращает com.withings.wiscale2 для моей шкалы Withings, а DataSet.getDataSource().getAppPackageName() всегда возвращает com.google.android.gms .

Здесь есть аналогичный вопрос: DataSource.getAppPackageName () всегда возвращает «com.google.android.gms» в Google Fit