我正在创建一个应用,其中用户需要使用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() );
}
答案 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,因为它们有限且缺陷。在您的情况下,我认为最好的方法是使用LocationManager和LocationListener类。您将获得位置,当您的手机找到卫星,然后您可以在地图上添加标记。如果您需要快速获取位置,也可以使用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
的示例代码,使用此功能,您将解决问题。