DataSource.getAppPackageName()始终返回" com.google.android.gms"在谷歌健身

时间:2015-12-17 09:03:06

标签: android google-play-services google-fit google-fit-sdk

我的应用正在阅读Google Fit的体重数据。数据由Withings和我自己的应用程序插入。但是,当我致电dataSet.getDataSource().getAppPackageName()时,这并没有任何区别,因为它总是返回com.google.android.gms。所以我没有机会知道数据的来源。 Google在本文中介绍了如何获取数据源的信息:https://developers.google.com/fit/android/data-attribution不幸的是,这对我来说完全没用。

我正在使用Google Play Services 8.3.0,使用Android 4.3,4.4.2和6.0.1进行测试。

任何人都可以确认相同的行为吗?或者我做错了什么?任何反馈都表示赞赏。

public void connect(final Activity activity) {
    client = new GoogleApiClient.Builder(activity)
        .addApi(Fitness.HISTORY_API)
        .addApi(Fitness.CONFIG_API)
        .addScope(new Scope(Scopes.FITNESS_ACTIVITY_READ_WRITE))
        .addScope(new Scope(Scopes.FITNESS_BODY_READ_WRITE))
        .build();
    client.connect();
}

public DataReadResult readWeightValues(final Date startDate, final Date endDate) {
    final DataReadRequest readRequest = new DataReadRequest.Builder()
        .enableServerQueries()
        .setTimeRange(startDate.getTime(), endDate.getTime(), TimeUnit.MILLISECONDS)
        .read(DataType.TYPE_WEIGHT)
        .build();

    return Fitness.HistoryApi.readData(client, readRequest).await(1, TimeUnit.MINUTES);
}

public void examineWeightValues(final DataReadResult dataReadResult) {
    if ((dataReadResult != null) && dataReadResult.getStatus().isSuccess()) {
        if (!dataReadResult.getBuckets().isEmpty()) {
            for (final Bucket bucket : dataReadResult.getBuckets()) {
                final List<DataSet> dataSets = bucket.getDataSets();
                for (final DataSet dataSet : dataSets) {
                    Log.i("=====>", dataSet.getDataSource().getAppPackageName());
                }
            }
        }

        if (!dataReadResult.getDataSets().isEmpty()) {
            for (final DataSet dataSet : dataReadResult.getDataSets()) {
                Log.i("=====>", dataSet.getDataSource().getAppPackageName());
            }
        }
    }
}

public Status insertWeightValue(final Context context, final Date date, final float weightKg) {
    final DataSource dataSource = new DataSource.Builder()
        .setAppPackageName(context.getApplicationContext().getPackageName())
        // already tried setAppPackageName(context) too
        .setName("com.mycompany.myapp")
        .setDataType(DataType.TYPE_WEIGHT)
        .setType(DataSource.TYPE_RAW)
        .build();

    final DataSet dataSet = DataSet.create(dataSource);

    final DataPoint dataPoint = dataSet.createDataPoint();
    dataPoint.setTimestamp(date.getTime(), TimeUnit.MILLISECONDS);
    dataPoint.getValue(Field.FIELD_WEIGHT).setFloat(weightKg);
    dataSet.add(dataPoint);

    return Fitness.HistoryApi.insertData(client, dataSet).await(1, TimeUnit.MINUTES);
}

1 个答案:

答案 0 :(得分:2)

DataPoint.getOriginalDataSource().getAppPackageName()会做到这一点。它会为我的Withings比例返回com.withings.wiscale2

注意:昨天晚上有一个答案提示这个解决方案,但今天早上它已经消失了。我不知道这里发生了什么,但不幸的是我不知道失踪答案的作者。无论如何,我想说谢谢你指出我正确的方向!