Java 在注销OnDataPointListener时,task.getResult()返回false /** *为所有必需的数据类型注册适应度侦听器 */ 私有void registerFitnessListeners(){ mStepCountListener= 新的OnDataPointListener(){ @凌驾 公共无效数据点(数据点数据点){ for(字段:dataPoint.getDataType().getFields()){ int-stepDelta=dataPoint.getValue(field).asInt(); mSteps+=阶跃增量; stepCountTextView.setText( 检测到的数据点字段:“+field.getName() +“\n检测到的数据点值:”+mSteps); } } }; Fitness.getSensorsClient(mContext、mGoogleSignInAccount) .添加( 新建SensorRequest.Builder() .setDataType(数据类型.TYPE\u步骤\u计数\u增量) .设置采样率(1,时间单位。秒) .setMaxDeliveryLatency(3,时间单位为秒) .SetFastEstate(1,时间单位为秒) .build(), mStepCountListener) .addOnCompleteListener( 新的OnCompleteListener(){ @凌驾 未完成的公共void(@NonNull任务){ if(task.issusccessful()){ Log.d(标记“Listener registered”); }否则{ Log.e(标记“侦听器未注册”,task.getException()); } } }); } /** *使用Sensors API注销侦听器。 */ 私有void unregisterFitnessListeners(){ Fitness.getSensorsClient(mContext、mGoogleSignInAccount) .remove(mStepCountListener) .addOnCompleteListener(新的OnCompleteListener(){ @凌驾 未完成的公共void(@NonNull任务){ if(task.issusccessful()&&task.getResult()){ Log.d(标记“Listener已删除”); }否则{ Log.d(标记“未删除侦听器”); } } }); }
当我试图注销OnDataPointListener以计算步数时,我的日志猫总是说listener未被删除。我知道task.getResult()总是返回false。为什么会这样??我做错什么了吗?如何删除侦听器 编辑:我在谷歌的问题跟踪器上创建了一个问题。您可以启动它,以便快速修复它。这是链接Java 在注销OnDataPointListener时,task.getResult()返回false /** *为所有必需的数据类型注册适应度侦听器 */ 私有void registerFitnessListeners(){ mStepCountListener= 新的OnDataPointListener(){ @凌驾 公共无效数据点(数据点数据点){ for(字段:dataPoint.getDataType().getFields()){ int-stepDelta=dataPoint.getValue(field).asInt(); mSteps+=阶跃增量; stepCountTextView.setText( 检测到的数据点字段:“+field.getName() +“\n检测到的数据点值:”+mSteps); } } }; Fitness.getSensorsClient(mContext、mGoogleSignInAccount) .添加( 新建SensorRequest.Builder() .setDataType(数据类型.TYPE\u步骤\u计数\u增量) .设置采样率(1,时间单位。秒) .setMaxDeliveryLatency(3,时间单位为秒) .SetFastEstate(1,时间单位为秒) .build(), mStepCountListener) .addOnCompleteListener( 新的OnCompleteListener(){ @凌驾 未完成的公共void(@NonNull任务){ if(task.issusccessful()){ Log.d(标记“Listener registered”); }否则{ Log.e(标记“侦听器未注册”,task.getException()); } } }); } /** *使用Sensors API注销侦听器。 */ 私有void unregisterFitnessListeners(){ Fitness.getSensorsClient(mContext、mGoogleSignInAccount) .remove(mStepCountListener) .addOnCompleteListener(新的OnCompleteListener(){ @凌驾 未完成的公共void(@NonNull任务){ if(task.issusccessful()&&task.getResult()){ Log.d(标记“Listener已删除”); }否则{ Log.d(标记“未删除侦听器”); } } }); },java,android,google-fit-sdk,Java,Android,Google Fit Sdk,当我试图注销OnDataPointListener以计算步数时,我的日志猫总是说listener未被删除。我知道task.getResult()总是返回false。为什么会这样??我做错什么了吗?如何删除侦听器 编辑:我在谷歌的问题跟踪器上创建了一个问题。您可以启动它,以便快速修复它。这是链接 我发现这个bug只出现在最新版本的google fit sdk中。旧版本工作正常。因此,将版本更改为下面的版本起到了作用:“com.google.android.gms:play services fit
我发现这个bug只出现在最新版本的google fit sdk中。旧版本工作正常。因此,将版本更改为下面的版本起到了作用:“com.google.android.gms:play services fitness:12.0.1”即使我也面临类似的问题,但后来我尝试了绕过
传感器sapi的方法
/**
* 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");
}
}
});
}
GoogleApiClient GoogleApiClient=Fitness
.getSensorsClient(上下文,GoogleSignIn.GetLastSignedAccount(上下文))
.asGoogleApiClient();
Fitness.SensorsApi.remove(googleApiClient,mListener).setResultCallback(new-ResultCallback()){
@凌驾
public void onResult(@NonNull状态){
if(status.issucess()){
Log.d(标记“onResult:成功删除传感器api”);
}否则{
Log.e(标签“onResult:无法删除传感器api”);
}
}
});
它就像一个符咒 “我也有同样的问题,有没有解决方案?”VanrajGhed说,我发现这个bug只存在于最新版本的GoogleFitAPI中。旧版本工作正常。因此,您可以将当前使用的版本更改为以下版本:“com.google.android.gms:play services fitness:12.0.1”谢谢。我已经为此挣扎了好几天了
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");
}
}
});