android – 如何正确检索将数据插入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健身应用和Runkeeper(目前,这些应用似乎只是与Fit集成的应用).

我的代码按预期检索这些活动,但是,对于每个活动,我的getSourceAppPackageNameFromDataSet()方法返回“com.google.android.gms”作为包名.根据Data Attribution section in Google Fit documentation,我希望该方法返回Runkeeper或Google Fit的包名,但这不会发生.

我做了一些可怕的错误,或者这是Google Fit中的错误

解决方法

DataPoint.getOriginalDataSource().getAppPackageName()将完成这一操作.它为我的Withings比例返回com.withings.wiscale2,而DataSet.getDataSource().getAppPackageName()总是返回com.google.android.gms.

这里有一个类似的问题:DataSource.getAppPackageName() always returns “com.google.android.gms” in Google Fit

相关文章

以下为个人理解,如错请评 CE: 凭据加密 (CE) 存储空间, 实际路径/data/user_ce/ DE: 设备加密 (DE) 存...
转载来源:https://blog.csdn.net/yfbdxz/article/details/114702144 用EventLog.writeEvent打的日志(或...
事件分发机制详解 一、基础知识介绍 1、经常用的事件有:MotionEvent.ACTION_DOWN,MotionEvent.ACTION...
又是好久没有写博客了,一直都比较忙,最近终于有时间沉淀和整理一下最近学到和解决的一些问题。 最近进...
Android性能优化——之控件的优化 前面讲了图像的优化,接下来分享一下控件的性能优化,这里主要是面向...
android的开源库是用来在android上显示gif图片的。我在网上查了一下,大家说这个框架写的不错,加载大的...