3

我使用了下面的代码,除了 onLocationChanged 被调用,即使我坐在同一个位置,一切正常。

我认为只有在我向右移动时才应该调用它?

我只想在移动一定距离后获得位置。

请帮帮我。提前致谢。

 @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

    locationMgr = (LocationManager) getSystemService(Context.LOCATION_SERVICE);

    locationMgr.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0,
    this);


}

    @Override
       public void onLocationChanged(Location location) {
           Toast.makeText(this, "Working!", Toast.LENGTH_SHORT).show();
                    if (location != null) {
                            double lat = location.getLatitude();
                            double lng = location.getLongitude();

                            String Text = "Latitud = " + lat + "\nLongitud = " +
     lng;

      Toast.makeText(getBaseContext(),Text,Toast.LENGTH_SHORT).show();
                    }
           }
4

2 回答 2

9

您正在以尽可能短的间隔/距离请求位置更新

locationMgr.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0,
this);

这就是文档中关于这些参数的内容

" 可以使用 minTime 参数控制位置更新间隔。位置更新之间的经过时间永远不会小于 minTime,尽管它可能更多取决于位置提供程序的实现和其他应用程序请求的更新间隔。"

minDistance 参数还可用于控制位置更新的频率。如果它大于 0,那么位置提供程序将仅在位置已更改至少 minDistance 米并且至少 minTime 毫秒已过去时向您的应用程序发送更新。然而,位置提供者使用 minDistance 参数来节省电量更加困难,因此 minTime 应该是节省电池寿命的主要工具。

我个人为我的应用程序使用 10 秒和 10 米的 minTime

locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 10000,
                10, locationListener);
于 2013-01-28T19:12:51.000 回答
4

网络位置并不像您想象的那么精确。因此,传感器返回的结果可能会波动。当您考虑到如果您与卫星没有直接视线,GPS 信号会减弱,并且可见卫星的数量也会影响精度时,更是如此。当您开始使用网络提供商时,情况会变得更糟,其中位置是通过蜂窝塔的信号强度以及可见无线网络的数量和 SSID 的三角测量来计算的。由于这些可能会波动很大,因此精度会受到很大影响。有很多平均算法和启发式算法来最小化这种波动,但最终没有什么可以稳定它以达到你期望的那样好。

一个简单的平均和变化过滤可以帮助你。添加基于设备加速度计的校正也有很大帮助,但它会使您的代码更加复杂。

于 2013-01-28T19:13:36.413 回答