【问题标题】:Do I need to call requestLocationUpdates() if I just need to find the location once?如果我只需要查找一次位置,是否需要调用 requestLocationUpdates() ?
【发布时间】:2014-04-11 20:11:16
【问题描述】:

我只需要在应用启动时找到用户的位置。我还需要创建自己的监听器,实现所有方法,并调用requestLocationUpdates()吗?好像很多无用的代码:

locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 999999999, 999999999, new LocationListener() {
    @Override
    public void onLocationChanged(Location location) {
    }
    @Override
    public void onStatusChanged(String provider, int status, Bundle extras) {
    }
    @Override
    public void onProviderEnabled(String provider) {
    }
    @Override
    public void onProviderDisabled(String provider) {
    }
});

【问题讨论】:

    标签: java android location locationmanager locationlistener


    【解决方案1】:

    我从未使用过它,但从 API 级别 9 开始,有一个名为 requestSingleUpdate 的方法可能是您想要的。

    另一种解决方案是使用requestLocationUpdates 并在收到第一次更新后立即取消注册侦听器,例如:

    @Override
    public void onLocationChanged(Location location) {
        locationManager.removeUpdates(this);
        // do something with the received location
    }
    

    在您的用例中,您可以将侦听器的其他方法留空,无需实现它们。

    【讨论】:

      【解决方案2】:

      您不需要,但使用 lastKnownLocation 并不能保证您获得准确的位置,甚至根本无法保证您获得准确的位置,因此您可能最终还是使用 requestLocationUpdates() 来获得准确的位置

      【讨论】:

      • 所以没有办法只获得更新一次?它必须是一个连续的定期服务?
      • 是的,正在使用getLastKnownLocation,但就像我说的那样,不能保证该位置是准确的,或者根本就没有一个位置。 getLastKnownLocation 所做的就是获取最后缓存的位置是什么
      • 也许你应该看看在谷歌播放服务developer.android.com/google/play-services/location.html中使用Fused location provider
      • 是的,我只是尝试使用getLastKnownLocation,它返回了null,所以它毕竟不是真正的更新。我想我别无选择,只能打电话给requestLocationUpdates
      • 我真的建议使用融合位置 API,因为您可以连接到它并获得一个位置然后就完成了
      【解决方案3】:

      您可以使用 getLastKnownLocation(provider) 查找由特定提供商确定的最后一个位置修复。

      Location location = locationManager.getLastKnownLocation(provider);
      

      请注意,getLastKnownLocation() 不会要求位置提供程序更新当前位置。因此,如果设备最近没有更新当前位置,则该值可能不存在或已过时。 返回的位置对象包括提供方提供的所有位置信息,例如纬度、经度、方位、高度、速度和进行定位的时间。

      【讨论】:

        猜你喜欢
        • 2011-06-08
        • 1970-01-01
        • 1970-01-01
        • 2017-10-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-09-17
        相关资源
        最近更新 更多