融合位置提供商setsmallestDisplacement在Android中不起作用

您好,我已经实现了融合位置提供者Api来获取服务中的位置更新。 我能够根据设置的时间间隔来触发onlocationchanged事件。 但是,当我把最小移动量设置为10米时,即使设备仍然存在,事件也会被解雇。 有没有人有类似的问题。 请提供build议。 下面是代码

mlocationrequest = LocationRequest.create(); mlocationrequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY); mlocationrequest.setInterval(60000); // Update location every 1 minute mlocationrequest.setFastestInterval(10000); mlocationrequest.setSmallestDisplacement(10); LocationServices.FusedLocationApi.requestLocationUpdates( mGoogleApiClient, mlocationrequest, this); 

要find两个位置值之间的距离,我使用了这种方法。

 public static float distFrom (float lat1, float lng1, float lat2, float lng2 ) { double earthRadius = 3958.75; double dLat = Math.toRadians(lat2-lat1); double dLng = Math.toRadians(lng2-lng1); double a = Math.sin(dLat/2) * Math.sin(dLat/2) + Math.cos(Math.toRadians(lat1)) * Math.cos(Math.toRadians(lat2)) * Math.sin(dLng/2) * Math.sin(dLng/2); double c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a)); double dist = earthRadius * c; int meterConversion = 1609; return new Float(dist * meterConversion).floatValue(); } 

但是,即使设备是Still,距离也是43.51,49.32,520.02。 是因为平板电脑在室内使用吗?

Solutions Collecting From Web of "融合位置提供商setsmallestDisplacement在Android中不起作用"

如果“位移”设置为“位置请求”,则如果设备仍处于“位移”优先于“间隔”(间隔和最快间隔)的位置,则无法获取位置。 正如我所猜测的 – 可能是你已经通过LocationServices.FusedLocationApi.requestLocationUpdates()不同的LocationRequest对象(没有位移设置)。

我正在寻找如何设置间隔和位移如何收到位置的答案。 我只是用自己的应用程序来validation自己,下面是LocationRequest的不同configuration的行为:

  1. 没有位移参数集
    setInterval设置为1分钟,最快到1分钟。

    我每分钟都收到一个地点。 但是你有时看到它收到很快,有时比较慢,这是setInterval是不精确的。

06-03 11:46:55.408 25776-25776 / MyLocationListener:onLocationChanged。
06-03 11:47:56.008 25776-25776 / MyLocationListener:onLocationChanged。
06-03 11:48:18.768 25776-25776 / MyLocationListener:onLocationChanged。
06-03 11:49:22.938 25776-25776 / MyLocationListener:onLocationChanged。
06-03 11:50:22.948 25776-25776 / MyLocationListener:onLocationChanged。
06-03 11:52:22.978 25776-25776 / MyLocationListener:onLocationChanged。
06-03 11:53:22.998 25776-25776 / MyLocationListener:onLocationChanged。

  1. 排量参数设置为10米
    setInterval如上1分钟。

    如果设备没有移动或跨越该距离,则不会收到位置更新。 在每一个onLocationChanged之间我走了10多米,所以我收到了loc。

06-03 11:26:53.328 16709-16709 / MyLocationListener:onLocationChanged。
06-03 11:35:38.318 16709-16709 / MyLocationListener:onLocationChanged。
06-03 11:39:16.728 16709-16709 / MyLocationListener:onLocationChanged。

onLocationChanged方法中,你可能会得到不同的onLocationChangedonLocationChanged方法描述的位移比10更大。所以请检查你所得到的onLocationChanged ,并手动测量一下距离,以便交叉validation事物。

除此之外,还有一个可能的原因是优先事项,如果上面的情况看起来不错,那么请尝试如下:

  mlocationrequest = LocationRequest.create(); mlocationrequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY); mlocationrequest.setSmallestDisplacement(10); mlocationrequest.setInterval(60000); // Update location every 1 minute mlocationrequest.setFastestInterval(10000);