Как правильно получить название пакета приложения, которое вставило данные в 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" в качестве имени пакета. В соответствии с разделом "Атрибуция данных" в документации Google Fit, я ожидал, что метод вернется имя пакета либо Runkeeper, либо Google Fit, но этого не происходит.

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


person Nikola Anusev    schedule 12.11.2014    source источник
comment
Я занят добавлением поддержки загрузки в свое приложение для Android. Поскольку я вообще не использую api для Android, но использую остальные API, я не могу даже установить имя пакета, поэтому вам нужно знать, что вы хотите всегда получать его. Извините, я не понимаю вашей конкретной проблемы.   -  person Ifor    schedule 13.11.2014


Ответы (1)


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

Здесь есть похожий вопрос: DataSource.getAppPackageName () всегда возвращает com.google.android.gms в Google Fit

person stefan222    schedule 22.12.2015