Ответ 1
пожалуйста, проверьте код образца Google Maps Android API v2
, используя это, вы решите свою проблему.
Я создаю приложение, в котором пользователю нужно увидеть его/ее географическое местоположение с помощью 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() );
}
пожалуйста, проверьте код образца Google Maps Android API v2
, используя это, вы решите свою проблему.
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 Me!"));
}
});
}
}
}
вызов этой функции в функции create
Мне не нравятся новые API карт google из-за их ограниченности и недостатков. В вашем случае я считаю, что лучший способ - использовать LocationManager и LocationListener. Вы получите местоположение, когда ваш телефон найдет спутники, а затем вы можете добавить маркер на карту. Также вы можете использовать метод getLastKnownLocation(), если вам нужно быстро найти место. Я думаю, что метод google maps getMyLocation()
возвращает null, потому что у телефона не так много времени, чтобы узнать его местоположение, когда приложение запускается. А в Google Maps API v2 нет какого-то метода onLocationChanged()
. Мне не нравится этот API.
map.getMyLocation() return null
Потому что нет места на onCreate();
в первый раз, когда позиция получения карты начинается после первого события onCameraChange().
поэтому используйте
map.setOnCameraChangeListener( new ...)
на вашей карте и выполните вашу реализацию после первого раза
Я сделал так:
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()));
}
};
Надеюсь, это поможет вам.