2

在我的应用程序中,我在当前位置的纬度和经度处显示带有标记的地图。我Map.setMyLocationEnabled(true)用于用户与他们的位置进行交互。

我的问题是setMyLocationEnabled方法,我的location - lat,long代码标记了不同的位置,如下所示:

地图

我使用以下代码获取当前位置的纬度和经度:

    LocationManager locationManager = (LocationManager)  getSystemService(Context.LOCATION_SERVICE);
    Criteria criteria = new Criteria();
    provider = locationManager.getBestProvider(criteria, true);
    Location location = locationManager.getLastKnownLocation(provider);
    if(location!=null){
        latitude = location.getLatitude();
        longitude = location.getLongitude();
         --------- 
         }

google 的 setLocationEnabled 提供的如何获取我当前位置的准确纬度和经度?

绿旗标记是我的标记,蓝点是 android 提供的。

4

2 回答 2

0

不要使用 LocationManager,而是通过 setOnMyLocationChangeListener 将自己添加到 GoogleMap 的位置客户端。它返回蓝点指向的相同位置。

于 2013-08-02T17:45:02.223 回答
0

我认为问题在于您正在使用该getLastKnownLocation()方法。

Location location = locationManager.getLastKnownLocation(provider);

此方法不返回最新位置,而是返回来自所选位置提供程序的最后一个已知位置。如文档here中所述。

返回一个 Location 指示从给定提供程序获得的最后一个已知位置修复的数据。

这可以在不启动提供程序的情况下完成。请注意,此位置可能已过时,例如,如果设备已关闭并移动到另一个位置。

谷歌地图 ( using Map.setMyLocationEnabled(true)) 可能正在标记您的最新位置,而接收到的位置locationManager.getLastKnownLocation()有点旧且放错了位置。这可能是您在不同位置获得两个标记的原因。

为了准确起见,您应该实施适当的位置侦听器并尝试从位置管理器获取最新的位置坐标。培训文档中提供了很好的信息

于 2013-08-02T18:11:08.753 回答