java - 注销 OnDataPointListener 时 task.getResult() 返回 false

标签 java android google-fit-sdk

/**
 *  Register fitness listeners for all the required data types
 */
private void registerFitnessListeners() {
    mStepCountListener =
            new OnDataPointListener() {
                @Override
                public void onDataPoint(DataPoint dataPoint) {
                    for (Field field : dataPoint.getDataType().getFields()){
                        int stepDelta = dataPoint.getValue(field).asInt();
                        mSteps += stepDelta;
                        stepCountTextView.setText(
                                "Detected Datapoint field: " + field.getName()
                                + "\nDetected Datapoint value:" + mSteps);
                    }
                }
            };

    Fitness.getSensorsClient(mContext, mGoogleSignInAccount)
            .add(
                    new SensorRequest.Builder()
                            .setDataType(DataType.TYPE_STEP_COUNT_DELTA)
                            .setSamplingRate(1, TimeUnit.SECONDS)
                            .setMaxDeliveryLatency(3, TimeUnit.SECONDS)
                            .setFastestRate(1, TimeUnit.SECONDS)
                            .build(),
                    mStepCountListener)
            .addOnCompleteListener(
                    new OnCompleteListener<Void>() {
                        @Override
                        public void onComplete(@NonNull Task<Void> task) {
                            if (task.isSuccessful()){
                                Log.d(TAG, "Listener registered");
                            }else{
                                Log.e(TAG, "Listener not registered", task.getException());
                            }
                        }
                    });
}


/**
 * Unregisters the listener with the Sensors API.
 */
private void unregisterFitnessListeners(){
    Fitness.getSensorsClient(mContext, mGoogleSignInAccount)
            .remove(mStepCountListener)
            .addOnCompleteListener(new OnCompleteListener<Boolean>() {
                @Override
                public void onComplete(@NonNull Task<Boolean> task) {
                    if(task.isSuccessful() && task.getResult()){
                        Log.d(TAG, "Listener was removed");
                    }else{
                        Log.d(TAG, "Listener was not removed");
                    }
                }
            });
}

当我尝试注销用于计算步数的 OnDataPointListener 时,我的 LogCat 总是说没有删除监听器。我知道 task.getResult() 总是返回 false。为什么会这样??难道我做错了什么?如何删除监听器?

编辑:我在 Google 的问题跟踪器上创建了一个问题。您可以给它加注星标,以便快速修复它。这是链接

https://issuetracker.google.com/issues/130741650

最佳答案

即使我也遇到了类似的问题,但后来我尝试了一种绕过 SensorsApi

的方法
GoogleApiClient googleApiClient = Fitness
                .getSensorsClient(context, GoogleSignIn.getLastSignedInAccount(context))
                .asGoogleApiClient();

Fitness.SensorsApi.remove(googleApiClient, mListener).setResultCallback(new ResultCallback<Status>() {
            @Override
            public void onResult(@NonNull Status status) {
                if (status.isSuccess()) {
                    Log.d(TAG, "onResult: Successfully removed sensor api");
                } else {
                    Log.e(TAG, "onResult: Unable to remove sensor api");
                }
            }
        });

它就像一个魅力!

关于java - 注销 OnDataPointListener 时 task.getResult() 返回 false,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50953326/

相关文章:

android - 我如何从 Google Fit API 获取步数?

java - 无法使用智能手环 2 从 Google Fit API 获取心率数据

java - Domino Agent 在/jvm/lib/ext 中使用第三方 jar 来解决 Java 安全问题

java - Guice 绑定(bind)提供程序未用于依赖项实现

java - 识别触发 onTap 调用的 GeoPoint

java - 改造-IllegalArgumentException : unexpected url

java - 创建可执行 JavaFX 的简单方法?

java - vert.x 如何是单线程的?

android - 通过集成到您的应用程序中的 ZXing 获取 QR 扫描结果

java - 将高度插入 Google Fit API 时出现字段超出范围错误