2013-01-21 14 views
11

Tworzę aplikację, w której użytkownik musi zobaczyć swoją lokalizację geograficzną za pomocą funkcji getMyLocation(), ale zwraca ona wartość null. Czy istnieje rozwiązanie tego problemu, ponieważ przeczytałem, że metoda getMyLocation() zawsze zwraca wartość null. Jestem nowy w Mapach Google, więc każda pomoc zostanie doceniona!Jak uzyskać aktualną lokalizację w Google Maps API V2

Kod:

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

Dodaj kod. Jak powinniśmy odgadnąć, co robisz źle? – rekire

+0

http://androidroadies.blogspot.in/2013/09/showing-current-location-in-google-maps.html – Roadies

Odpowiedz

0

proszę sprawdzić kod przykładowy Google Maps Android API v2, Za pomocą tego rozwiążesz problem.

Sample Code

+0

Nie widzę żadnego rozwiązania pod podanym linkiem. Proszę wyjaśnić, co chcesz mi pokazać? – Xarialon

+1

zainstaluj 'google-play-services' w swoim menedżerze sdk.if już zainstalowanym, a następnie otwórz folder sdk i wykonaj następujące kroki' /dodatki/google/google_play_services/samples/maps' masz przykładowy kod . –

+0

Ahh, dzięki. Widziałem kilka ładnych przykładów i przyjmuję twoją odpowiedź, bo to zdecydowanie pomogło mi! – Xarialon

4

Nie lubię nowego interfejsu API Map Google z powodu ich ograniczonej i wad. W twoim przypadku myślę, że najlepszym sposobem jest użycie klas LocationManager i LocationListener. Dostaniesz lokalizację, gdy telefon znajdzie satelity, a następnie możesz dodać znacznik na mapie. Możesz także użyć metody getLastKnownLocation(), jeśli chcesz szybko uzyskać lokalizację. Myślę, że metoda google maps getMyLocation() zwraca wartość null, ponieważ telefon nie ma zbyt wiele czasu na poznanie jej lokalizacji, po uruchomieniu aplikacji. A w Google Maps API v2 nie ma metody onLocationChanged(). Nie lubię tego API.

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

      } 
     } 
    } 

wywołać tę funkcję w dniu utworzyć funkcję

+0

nie działa ... jakiekolwiek inne rozwiązanie? –

+0

gdzie utkniesz mi powiedz? – Nitin

+0

Cóż, nie udało mi się znaleźć mojej bieżącej lokalizacji. ale osiągnąłem to, używając klasy Menedżera lokalizacji. –

1

map.getMyLocation() return null poniewaz nie ma miejsce na onCreate();

po raz pierwszy Uzyskaj pozycja jest po pierwszym onCameraChange() wydarzenie .

więc używać

map.setOnCameraChangeListener(new ...) 

na mapie i zrobić swoją implementację po wystąpieniu po raz pierwszy

1

mam zrobić w ten sposób:

private GoogleMap mGoogleMap; 
private SupportMapFragment mMapFragment; 

na onCreate():

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

mGoogleMap.setOnMyLocationChangeListener(myLocationChangeListener); 

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

nadzieję, że to pomoże.

Powiązane problemy