【问题标题】:onlocationChanged is called even if I am sitting at the same place即使我坐在同一个地方,也会调用 onlocationChanged
【发布时间】:2013-01-28 19:06:33
【问题描述】:

我已经使用了下面的代码并且一切正常,除了 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();
                    }
           }

【问题讨论】:

    标签: android google-maps location


    【解决方案1】:

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

    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);
    

    【讨论】:

    • 感谢 Jade。这是一个很好的答案。我有一个附加查询:我想在位置更改后进行更新,因为我在登录我的应用程序时已经在使用当前位置。如何第一次禁用。我的意思是使用我的代码上面输入了我应该修改什么?再次感谢。抱歉给您添麻烦了。
    • 没问题的人:)!我不确定你的问题,对不起。首次获取位置后(应用程序启动时),您希望在位置更改后能够获取更新。明白了。您已经有了相应的代码。 “第一次如何禁用”是什么意思?
    • onLocationchanged() 是否第一次运行,它是在应用程序启动时运行还是仅在我当前位置以外的位置发生变化后运行?
    • 因为当我如前所述登录时,位置已更新。然后我想记录位置。
    • 是的,假设您在设置 locationListener 并请求更新之前获取当前位置..那么是的,它只会在初始固定位置更改后更新
    【解决方案2】:

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

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

    【讨论】:

    • 感谢先生的回复。这是一个很好的解释。肯定会研究算法。
    猜你喜欢
    • 1970-01-01
    • 2014-12-03
    • 1970-01-01
    • 2017-03-01
    • 2015-12-07
    • 1970-01-01
    • 1970-01-01
    • 2021-08-27
    • 1970-01-01
    相关资源
    最近更新 更多