如何在Google Maps API V2中获取当前位置

时间:2013-01-21 11:38:10

标签: android null google-maps-android-api-2

我正在创建一个应用,其中用户需要使用getMyLocation()查看他/她的地理位置,但这将返回null。有没有任何解决方案,因为我确实读到getMyLocation()方法总是返回null。我是谷歌地图的新手,所以任何帮助都将不胜感激!

代码:

GoogleMap map = ((SupportMapFragment)  getSupportFragmentManager().findFragmentById(R.id.map)).getMap();
map.setMapType(GoogleMap.MAP_TYPE_HYBRID);
map.setMyLocationEnabled(true);
Location myLocation = map.getMyLocation();

if( myLocation != null ){
    helper.showToast( "Latitude: " + myLocation.getLatitude() + "\nLongitude: " + myLocation.getLongitude() );
}

5 个答案:

答案 0 :(得分:15)

private void setUpMapIfNeeded() {
        // Do a null check to confirm that we have not already instantiated the map.
        if (mMap == null) {
            // Try to obtain the map from the SupportMapFragment.
            mMap = ((SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map))
                    .getMap();
            mMap.setMyLocationEnabled(true);
            // Check if we were successful in obtaining the map.
            if (mMap != null) {


             mMap.setOnMyLocationChangeListener(new GoogleMap.OnMyLocationChangeListener() {

           @Override
           public void onMyLocationChange(Location arg0) {
            // TODO Auto-generated method stub

             mMap.addMarker(new MarkerOptions().position(new LatLng(arg0.getLatitude(), arg0.getLongitude())).title("It's Me!"));
           }
          });

            }
        }
    }

在创建函数

中调用此函数

答案 1 :(得分:4)

我不喜欢新的谷歌地图API,因为它们有限且缺陷。在您的情况下,我认为最好的方法是使用LocationManagerLocationListener类。您将获得位置,当您的手机找到卫星,然后您可以在地图上添加标记。如果您需要快速获取位置,也可以使用getLastKnownLocation()方法。我认为谷歌地图getMyLocation()方法返回null,因为当应用启动时,手机没有太多时间知道它的位置。在Google Maps API v2中,没有某种onLocationChanged()方法。我不喜欢这个API。

答案 2 :(得分:1)

map.getMyLocation() return null因为onCreate();

上没有位置

第一次地图获取位置是在第一次onCameraChange()事件之后。

所以使用

map.setOnCameraChangeListener( new ...)
在地图上

并在第一次发生后执行

答案 3 :(得分:1)

我这样做了:

private GoogleMap mGoogleMap;
private SupportMapFragment mMapFragment;

on onCreate()

mMapFragment = (SupportMapFragment) getFragmentManager().findFragmentById(R.id.map);
mGoogleMap = mMapFragment.getMap();

mGoogleMap.setOnMyLocationChangeListener(myLocationChangeListener);

现在添加 MyLocationChangeListener

private GoogleMap.OnMyLocationChangeListener myLocationChangeListener = new GoogleMap.OnMyLocationChangeListener() {
    @Override
    public void onMyLocationChange(Location location) {
      Log.i(TAG, "Latitude: "+String.valueOf(location.getLatitude())+" - Longitude: "+String.valueOf(location.getLongitude()));
   }
};

希望这会对你有所帮助。

答案 4 :(得分:0)

请检查Google Maps Android API v2的示例代码,使用此功能,您将解决问题。

Sample Code