Java Google Fit:无法实时更新步长和距离

Java Google Fit:无法实时更新步长和距离,java,android,google-fit,Java,Android,Google Fit,我可以使用sensor api实时获取step数据。 我还可以实时获取距离数据。 然而,我不能把步伐和距离放在一起 这是我的密码。 private void registerFitnessDataListener(最终数据源数据源,最终数据类型数据类型){ if(mListener==null) mListener=新OnDataPointListener(){ @凌驾 公共无效数据点(数据点数据点){ IsUpdatesStep=false; 如果(!isUpdatesStep){ for(字

我可以使用sensor api实时获取step数据。 我还可以实时获取距离数据。 然而,我不能把步伐和距离放在一起

这是我的密码。
private void registerFitnessDataListener(最终数据源数据源,最终数据类型数据类型){
if(mListener==null)
mListener=新OnDataPointListener(){
@凌驾
公共无效数据点(数据点数据点){
IsUpdatesStep=false;
如果(!isUpdatesStep){
for(字段:dataPoint.getDataType().getFields()){
if(String.valueOf(field).equals(“步骤(i)”){
thisActivity.runOnUiThread(新的Runnable(){
@凌驾
公开募捐{
如果(!isUpdatesStep){
}
}
});
}else if(String.valueOf(field).equals(“距离(f)”){
thisActivity.runOnUiThread(新的Runnable(){
@凌驾
公开募捐{
如果(!isUpdatesStep){
}
}
});
}
}
}
}
};
SensorRequest req=新的SensorRequest.Builder()
.setDataSource(数据源)
.setDataType(数据类型)
.setSamplingRate(2000,时间单位为毫秒)
.build();
Fitness.SensorsApi.add(
McClient,
请求,
姆利斯滕纳)
.setResultCallback(新的ResultCallback(){
@凌驾
公共void onResult(状态){
if(status.issucess()){
}否则{
}
}
});
}
私有void findFitnessDataSources(最终数据类型DataType){
Fitness.SensorsApi.findDataSources(mClient,newdatasourcerequest.Builder())
.setDataTypes(数据类型)
.setDataSourceTypes(DataSource.TYPE_派生)
.build())
.setResultCallback(新的ResultCallback(){
@凌驾
public void onResult(DataSourcesResult DataSourcesResult){
对于(DataSource DataSource:dataSourcesResult.getDataSources()){
if(dataSource.getDataType().equals(DataType.TYPE\u STEP\u COUNT\u DELTA)){
registerFitnessDataListener(数据源、数据类型、类型、步骤、计数、增量);
setDailySteps();
}else if(dataSource.getDataType().equals(DataType.TYPE_DISTANCE_DELTA)){
registerFitnessDataListener(数据源,DataType.TYPE_DISTANCE_DELTA);
setDailyDistance();
}
}
}
});
}
私有void buildFitnessClient(){
if(mClient==null&&checkPermissions()){
mClient=new-GoogleApiClient.Builder(getActivity())
.addApi(健身传感器\ API)
.addApi(健身历史\ U API)
.addScope(健身.范围\活动\阅读)
.addConnectionCallbacks(
新的GoogleAppClient.ConnectionCallbacks(){
@凌驾
未连接的公共空间(捆绑包){
findFitnessDataSources(数据类型.类型\步骤\计数\增量);
findFitnessDataSources(数据类型.TYPE_DISTANCE_DELTA);
}
@凌驾
公共空间连接暂停(int i){
if(i==GoogleApiClient.ConnectionCallbacks.CAUSE\u NETWORK\u LOST){
}else if(i==GoogleAppClient.ConnectionCallbacks.CAUSE\u服务\u已断开连接){
}
}
}
)
.enableAutoManage(getActivity(),0,新的GoogleAppClient.OnConnectionFailedListener()){
@凌驾
连接失败的公共void(连接结果){
}
})
.build();
}
}
当我评论其中一个函数时<代码>findFitnessDataSources(数据类型.类型\步骤\计数\增量)
查找数据源(数据类型.类型\距离\增量)

在方法
buildFitnessClient()


应用程序可以正常工作。(仅更新一个值)

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

您使用了哪些时间间隔来解决此问题?您是否能够在所有android设备中仅使用DELTA而不使用累计值精确设置每日距离和步长?
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();
    }
}