android中当前位置的准确纬度和经度

时间:2013-08-02 13:24:09

标签: android android-maps android-location

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

我的问题是setMyLocationEnabled方法和我的location - lat,long代码标记的位置如下:

Map

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

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

如何获得谷歌的setLocationEnabled提供的当前位置的准确纬度和经度?

  

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

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

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

Location location = locationManager.getLastKnownLocation(provider);

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

  

返回指示上一个已知位置的数据的位置   从给定的提供者处获得的修复。

     

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

谷歌地图(using Map.setMyLocationEnabled(true))可能正在标记您的最新位置,而从locationManager.getLastKnownLocation()收到的位置有点陈旧且放错地方。这可能就是为什么您要将两个标记放在不同的职位。

为了准确起见,您应该实施正确的位置监听器,并尝试从位置管理器获取最新的位置坐标。 training docs

提供了很好的信息