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

11

我正在创建一个应用程序,在此应用程序中用户需要使用getMyLocation()方法来查看自己的地理位置,但是返回值为null。是否有任何解决方法,因为我已经读到了getMyLocation()方法总是返回null。我对Google Maps不熟悉,所以任何帮助都将不胜感激!

代码:

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

添加一些代码。我们怎么猜得到你哪里做错了呢? - rekire
http://androidroadies.blogspot.in/2013/09/showing-current-location-in-google-maps.html - Roadies
5个回答

14
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!"));
           }
          });

            }
        }
    }

在on create函数中调用此函数。


你卡在哪里了?告诉我。 - Nitin
好吧,之前无法找到我的当前位置。但是我通过使用位置管理器类实现了这一点。 - Suresh Sharma
这是可用的代码。只需使用Location arg0作为您当前(非空)的位置! - Volodymyr Kulyk

4
我不喜欢新版的谷歌地图API,因为它有很多限制和缺陷。在您的情况下,我认为最好的方法是使用LocationManagerLocationListener类。当您的手机找到卫星时,您可以获取位置并在地图上添加标记。如果需要快速获取位置,则还可以使用getLastKnownLocation()方法。我认为谷歌地图中的getMyLocation()方法返回null,是因为应用程序启动时,手机没有足够的时间来确定它的位置。在谷歌地图API v2中也没有类似于onLocationChanged()的方法。我不喜欢这个API。

1

map.getMyLocation() 返回 null,因为在 onCreate(); 中没有位置信息。

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

因此,请使用

map.setOnCameraChangeListener( new ...)

在你的地图上,并在第一次发生后执行你的实现。

1
我已经这样做了:

private GoogleMap mGoogleMap;
private SupportMapFragment mMapFragment;

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

希望这能对你有所帮助。

0
请查看 Google Maps Android API v2 的示例代码,使用它可以解决您的问题。

示例代码


我在您提供的链接中没有看到任何解决方案。请解释一下您想要向我展示什么? - Aerial
1
google-play-services 安装到您的 SDK 管理器中。如果已经安装,则打开您的 SDK 文件夹并按照以下步骤操作 <android-sdk-folder>/extras/google/google_play_services/samples/maps,您将获得示例代码。 - Rahul Patel
啊,谢谢。我看到了一些不错的例子,我会接受你的答案,因为这确实帮了我一把! - Aerial
实际问题是什么?你是如何解决的?我也遇到了同样的问题。 - brainmurphy1
@publicstaticvoid 安装完google-play-services后,进入sdk目录下的\sdk\extras\google\google_play_services\samples\maps文件夹,你可以在这里看到示例。 - Rahul Patel

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接