如何获取Google Maps Android API v2中的当前位置?

jjL*_*Lin 42 android google-maps

运用

mMap.setMyLocationEnabled(true)
Run Code Online (Sandbox Code Playgroud)

可以设置myLocation层启用.
但问题是当用户点击按钮时如何获取myLocation?我想得到经度和纬度.

yed*_*yak 56

Google Maps API位置现在可以使用,即使有听众也可以使用它,例如:

private GoogleMap.OnMyLocationChangeListener myLocationChangeListener = new GoogleMap.OnMyLocationChangeListener() {
    @Override
    public void onMyLocationChange(Location location) {
        LatLng loc = new LatLng(location.getLatitude(), location.getLongitude());
        mMarker = mMap.addMarker(new MarkerOptions().position(loc));
        if(mMap != null){
            mMap.animateCamera(CameraUpdateFactory.newLatLngZoom(loc, 16.0f));
        }
    }
};
Run Code Online (Sandbox Code Playgroud)

然后为地图设置监听器:

mMap.setOnMyLocationChangeListener(myLocationChangeListener);
Run Code Online (Sandbox Code Playgroud)

当地图首次找到该位置时,将调用此方法.

根本不需要LocationService或LocationManager.

OnMyLocationChangeListener接口已弃用.请改用com.google.android.gms.location.FusedLocationProviderApi.FusedLocationProviderApi提供改进的定位和功率使用,并由"我的位置"蓝点使用.有关示例代码示例或位置开发人员指南,请参阅示例应用程序文件夹中的MyLocationDemoActivity.

  • "不推荐使用此界面.请改用com.google.android.gms.location.FusedLocationProviderApi"https://developers.google.com/android/reference/com/google/android/gms/maps/GoogleMap.OnMyLocationChangeListener (11认同)

Rya*_*ara 31

目前,GoogleMap.getMyLocation()始终在每种情况下都返回null.

目前有两个针对Google的错误报告,我知道,问题40932问题4644.

如提出了较早实施LocationListener的是不正确的,因为LocationListener的将是不同步您尝试使用新的API中的LocationOverlay.

按照早期由Pramod J George链接的Vogella网站教程,将为您提供旧版Google Maps API的说明.

所以我很抱歉没有给你一个通过这种方式检索你的位置的方法.目前,locationListener可能是唯一的方法,但我确信谷歌正在努力解决新API中的问题.

也很抱歉没有发布更多链接,StackOverlow认为我是垃圾邮件,因为我没有代表.

---- 2013年2月4日更新----

Google已声明该问题将通过问题4644在Google Maps API的下一次更新中修复 .我不确定何时会发生更新,但一旦完成,我将再次编辑此帖子.

---- 2013年4月10日更新----

谷歌已经表示该问题已通过问题4644修复 .它现在应该工作.


小智 19

试试这个

LocationManager service = (LocationManager) getSystemService(LOCATION_SERVICE);
Criteria criteria = new Criteria();
String provider = service.getBestProvider(criteria, false);
Location location = service.getLastKnownLocation(provider);
LatLng userLocation = new LatLng(location.getLatitude(),location.getLongitude());
Run Code Online (Sandbox Code Playgroud)

  • 这是获取LAst已知位置,但不是当前位置. (4认同)
  • getLastKnownLocation可以返回null,因此它不够可靠 (2认同)