/**
* 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 的问题跟踪器上创建了一个问题。您可以给它加注星标,以便快速修复它。这是链接
最佳答案
即使我也遇到了类似的问题,但后来我尝试了一种绕过 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/