【问题标题】:Google Fit : Cannot update both step and distance in real-timeGoogle Fit:无法实时更新步数和距离
【发布时间】:2016-06-30 10:36:29
【问题描述】:

我可以使用传感器 api 实时获取步数数据。 我也可以实时获取距离数据。 但是,我无法将步伐和距离放在一起。

这是我的代码。

private void registerFitnessDataListener(final DataSource dataSource, final DataType dataType) {
    if (mListener == null)
        mListener = new OnDataPointListener() {
            @Override
            public void onDataPoint(DataPoint dataPoint) {
                isUpdatingStep = false;
                if (!isUpdatingStep) {
                    for (Field field : dataPoint.getDataType().getFields()) {
                        if (String.valueOf(field).equals("steps(i)")) {
                            thisActivity.runOnUiThread(new Runnable() {
                                @Override
                                public void run() {
                                    if (!isUpdatingStep) {
                                    }
                                }
                            });
                        } else if (String.valueOf(field).equals("distance(f)")) {
                            thisActivity.runOnUiThread(new Runnable() {
                                @Override
                                public void run() {
                                    if (!isUpdatingStep) {
                                    }
                                }
                            });
                        }
                    }
                }
            }
        };
    SensorRequest req = new SensorRequest.Builder()
            .setDataSource(dataSource)
            .setDataType(dataType)
            .setSamplingRate(2000, TimeUnit.MILLISECONDS)
            .build();

    Fitness.SensorsApi.add(
            mClient,
            req,
            mListener)
            .setResultCallback(new ResultCallback<Status>() {
                @Override
                public void onResult(Status status) {
                    if (status.isSuccess()) {
                    } else {
                    }
                }
            });
}

   private void findFitnessDataSources(final DataType dataType) {
    Fitness.SensorsApi.findDataSources(mClient, new DataSourcesRequest.Builder()
            .setDataTypes(dataType)
            .setDataSourceTypes(DataSource.TYPE_DERIVED)
            .build())
            .setResultCallback(new ResultCallback<DataSourcesResult>() {
                @Override
                public void onResult(DataSourcesResult dataSourcesResult) {
                    for (DataSource dataSource : dataSourcesResult.getDataSources()) {
                        if (dataSource.getDataType().equals(DataType.TYPE_STEP_COUNT_DELTA)) {
                            registerFitnessDataListener(dataSource, DataType.TYPE_STEP_COUNT_DELTA);
                            setDailySteps();
                        } else if (dataSource.getDataType().equals(DataType.TYPE_DISTANCE_DELTA)) {
                            registerFitnessDataListener(dataSource, DataType.TYPE_DISTANCE_DELTA);
                            setDailyDistance();
                        }
                    }
                }
            });
}

    private void buildFitnessClient() {
    if (mClient == null && checkPermissions()) {
        mClient = new GoogleApiClient.Builder(getActivity())
                .addApi(Fitness.SENSORS_API)
                .addApi(Fitness.HISTORY_API)
                .addScope(Fitness.SCOPE_ACTIVITY_READ)
                .addConnectionCallbacks(
                        new GoogleApiClient.ConnectionCallbacks() {
                            @Override
                            public void onConnected(Bundle bundle) {
                                findFitnessDataSources(DataType.TYPE_STEP_COUNT_DELTA);
                                findFitnessDataSources(DataType.TYPE_DISTANCE_DELTA);
                            }

                            @Override
                            public void onConnectionSuspended(int i) {
                                if (i == GoogleApiClient.ConnectionCallbacks.CAUSE_NETWORK_LOST) {
                                } else if (i == GoogleApiClient.ConnectionCallbacks.CAUSE_SERVICE_DISCONNECTED) {
                                }
                            }
                        }
                )
                .enableAutoManage(getActivity(), 0, new GoogleApiClient.OnConnectionFailedListener() {
                    @Override
                    public void onConnectionFailed(ConnectionResult result) {
                    }
                })
                .build();
    }
}

附言。当我评论这些功能之一时。 findFitnessDataSources(DataType.TYPE_STEP_COUNT_DELTA);findFitnessDataSources(DataType.TYPE_DISTANCE_DELTA);

在方法buildFitnessClient()中。

应用可以正常运行。(只更新一个值)

【问题讨论】:

  • 您使用了哪些时间间隔来解决此问题?您是否能够在所有 Android 设备中仅使用 DELTA 而无需使用 CUMULATIVE 准确设置每日距离和步数?

标签: java android google-fit


【解决方案1】:

将调用函数中的两个 findFitnessDataSources 方法的采样率更改为不同可能会解决此问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多