2016-03-06 112 views
4

介绍Fused Location Provider:有没有方法检查位置更新是否失败?

在我的应用我想要得到的,其中用户目前是一次性的准确位置。当我使用FusedLocationProviderApi.getLastLocation有时这将是空的或过时的位置,因为我发现这只是获取缓存的位置,并不要求新的位置更新。

解决方案只请求一次位置更新,如下所示。

LocationRequest locationRequest = LocationRequest.create() 
       .setNumUpdates(1) 
       .setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY) 
       .setInterval(0); 

     LocationServices.FusedLocationApi.requestLocationUpdates(mGoogleApiClient,locationRequest,this) 

现在我得到一个更准确的位置所有的时间。

我的问题

我怎样才能确定一个位置更新失败了吗?因为我只申请了1

当获得位置更新这个调用回调函数

@Override 
public void onLocationChanged(Location location) { 

} 

然而,这不会被调用,如果位置更新失败。

我已经试过

我看到有一个ResultCallback。但是,即使一次性位置更新失败,onSuccess也总是被调用。

LocationServices.FusedLocationApi.requestLocationUpdates(mGoogleApiClient,locationRequest,this).setResultCallback(new ResultCallbacks<Status>() { 
      @Override 
      public void onSuccess(@NonNull Status status) { 
       DebugUtils.log("requestLocationUpdates ResultCallback onSuccess + " + status.toString(),true,true); 
      } 

      @Override 
      public void onFailure(@NonNull Status status) { 
       DebugUtils.log("requestLocationUpdates ResultCallback onFailure + " + status.toString(),true,true); 
      } 
     }); 

其他

使用com.google.android.gms:play-services-location:8.4.0

感谢您的阅读,请帮助我。

+0

尝试检查'onSuccess()'方法的'status'参数? –

+0

是的,当它应该失败时,toString方法报告“Status {statusCode = SUCCESS,resolution = null}” –

回答

12

在挖掘了API多一点并做了一些测试之后,我发现了一个解决方案来解决我的问题,这似乎正在起作用。

LocationServices.FusedLocationApi.requestLocationUpdates(mGoogleApiClient, locationRequest, new LocationCallback() { 
      @Override 
      public void onLocationResult(LocationResult result) { 
       DebugUtils.log("onLocationResult"); 
      } 

      @Override 
      public void onLocationAvailability(LocationAvailability locationAvailability) { 
       DebugUtils.log("onLocationAvailability: isLocationAvailable = " + locationAvailability.isLocationAvailable()); 
      } 
     }, null); 

而不是使用LocationListener。我使用LocationCallback

onLocationResult仅根据LocationRequest提供最新的位置结果。如果无法提供位置,则不会调用该位置,并且在我的测试期间,位置不可用且GPS在室内使用等情况时不会被调用。请致电result.getLastLocation()以获取实际位置对象。

onLocationAvailablity总是被调用。 locationAvailability.isLocationAvailable()如果设备位置已知并且在活动LocationRequests请求的提示内合理地更新,则返回true。如果无法确定位置可能来自许多原因,包括禁用位置设置或无法在设备环境中检索传感器数据,则返回False。

我已经测试过没有位置服务,只能在室内使用GPS。在每种情况下,我删除了所有现有的位置历史记录(以防止缓存的位置)。一个准确的最新位置总是返回。

其他人能证明这一点吗?

注意:requestLocationUpdates调用的最后一个参数是活套。传入null意味着它将使用调用线程的消息队列。

+0

你知道这件事我花了整整两天。我会尽可能地分享这个答案。它应该被标记为接受答案。 – Subho

+0

@Ersen Osman谢谢你兄弟你救了我的命.....再次感谢你 –

相关问题