首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >谷歌健身传感器: onDataPoint未被调用

谷歌健身传感器: onDataPoint未被调用
EN

Stack Overflow用户
提问于 2016-08-06 09:16:32
回答 2查看 732关注 0票数 0

我正在创建一个应用程序,它使用google fit API跟踪用户的步数。我不止一次地想让onDataPoint方法被调用。我的代码几乎就是google-fit示例代码的副本,只是用step替换了location。

示例代码是found here。它与我正在测试的代码非常相似,只是做了一些小小的调整。

这是我的代码。任何帮助都将不胜感激,我到处寻找,都找不到解决方案。

代码语言:javascript
复制
private void findFitnessDataSources() {
    // [START find_data_sources]
    // Note: Fitness.SensorsApi.findDataSources() requires the ACCESS_FINE_LOCATION permission.
    Fitness.SensorsApi.findDataSources(mClient, new DataSourcesRequest.Builder()
            // At least one datatype must be specified.
            .setDataTypes(DataType.TYPE_STEP_COUNT_DELTA)
            // Can specify whether data type is raw or derived.
            .setDataSourceTypes(DataSource.TYPE_RAW)
            .build())
            .setResultCallback(new ResultCallback<DataSourcesResult>() {
                @Override
                public void onResult(DataSourcesResult dataSourcesResult) {
                    Log.i(TAG, "Result: " + dataSourcesResult.getStatus().toString());
                    for (DataSource dataSource : dataSourcesResult.getDataSources()) {
                        Log.i(TAG, "Data source found: " + dataSource.toString());
                        Log.i(TAG, "Data Source type: " + dataSource.getDataType().getName());

                        //Let's register a listener to receive Activity data!
                        if (dataSource.getDataType().equals(DataType.TYPE_STEP_COUNT_DELTA)
                                && mListener == null) {
                            Log.i(TAG, "Data source for LOCATION_SAMPLE found!  Registering.");
                            registerFitnessDataListener(dataSource,
                                    DataType.TYPE_STEP_COUNT_DELTA);
                        }
                    }
                }
            });
}


private void registerFitnessDataListener(DataSource dataSource, DataType dataType) {
    // [START register_data_listener]
    mListener = new OnDataPointListener() {
        @Override
        public void onDataPoint(DataPoint dataPoint) {
            for (Field field : dataPoint.getDataType().getFields()) {
                Value val = dataPoint.getValue(field);
                Log.i(TAG, "Detected DataPoint field: " + field.getName());
                Log.i(TAG, "Detected DataPoint value: " + val);
            }
        }
    };

    Fitness.SensorsApi.add(
            mClient,
            new SensorRequest.Builder()
                    .setDataSource(dataSource) // Optional but recommended for custom data sets.
                    .setDataType(dataType) // Can't be omitted.
                    .setSamplingRate(1, TimeUnit.SECONDS)
                    .build(),
            mListener)
            .setResultCallback(new ResultCallback<Status>() {
                @Override
                public void onResult(Status status) {
                    if (status.isSuccess()) {
                        Log.i(TAG, "Listener registered!");
                    } else {
                        Log.i(TAG, "Listener not registered.");
                    }
                }
            });
}
EN

回答 2

Stack Overflow用户

发布于 2016-08-10 06:06:14

问题在later SO question中解决了,我的怀疑是正确的。问题是TYPE_STEP_COUNT_DELTA不是原始数据类型--Google uses a combination of sensors, accelerometer, machine learning, etc. to determine step count。因此,需要删除.setDataSourceTypes(DataSource.TYPE_RAW)行。

事实上,另一个问题的OP注意到,只删除这一行比用DataSource.TYPE_DERIVED替换它提供的结果更不准确,所以建议这样做。

票数 2
EN

Stack Overflow用户

发布于 2016-08-10 07:41:01

正如我在我的文章中提到的,google fit的step_count使用派生数据类型来处理所有事情,无论是累积、增量等。我观察了我的应用程序10次迭代的结果。我发现

google提供的

  • Google fit API仅对所有step_count.
  • You使用派生数据类型,也不能指定数据类型,但与Google Fit应用程序相比,它可以给出不同的结果。

在Google Fit常见问题部分中也提到了同样的事情。[https://developers.google.com/fit/faq

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38799685

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档