2014-04-16 16 views
11

Chcę zrobić program do obliczenia odległości między niektórymi miejscami do mojej bieżącej lokalizacji, ale mój googleMap.getMyLocation(); doesnt działa poprawnie.googleMap.getMyLocation(); nie mogę uzyskać bieżącej lokalizacji

googleMap = ((MapFragment) getFragmentManager().findFragmentById(R.id.map)).getMap(); 
googleMap.setMyLocationEnabled(true); 
googleMap.getUiSettings().setCompassEnabled(false); 
mylocation = googleMap.getMyLocation(); 
direction = new GMapV2Direction(); 

LatLng from, to; 
from = new LatLng(-7.26071409, 112.80674726); 
for(int i=0; i<lat.length; i++){  
    to = new LatLng(lat[i], lon[i]); 
    doc = direksi.getDocument(from, to, GMapV2Direction.MODE_DRIVING); 
    distance[i] = (double)direction.getDistanceValue(doc)/1000; 
} 

Zapisałem szerokość i długość geograficzną niektórych miejsc w lat [] i lon []. LatLng "od" to mylokacja, a "do" to moje miejsca docelowe. problem pojawia się, gdy mogę zmienić

from = new LatLng(-7.26071409, 112.80674726); 
to 
from = new LatLng(mylocation.getLatitude(), mylocation.getLongitude()); 

chcę zrobić obliczenia bez otwierania GoogleMaps. Mapy google pojawią się po dotknięciu przycisku mapy jako wyskakującego okna. więc obliczenie nastąpi bez otwierania kalkulacji

proszę mi pomóc

+0

getMyLocation(), [ta metoda jest nieaktualna] (https://developer.android.com/reference/com/google/android/gms/maps/GoogleMap.html). zamiast tego użyj LocationClient. – AlexDG

+0

używasz google map v2? –

+0

@Alex Nie wiem, jak korzystać z LocationClient. czy możesz rozwinąć? – user3506223

Odpowiedz

21

spróbować tego ... Mam nadzieję, że będzie to pomocne dla Ciebie

LocationManager locationManager = (LocationManager) 
     getSystemService(Context.LOCATION_SERVICE); 
Criteria criteria = new Criteria(); 

Location location = locationManager.getLastKnownLocation(locationManager 
     .getBestProvider(criteria, false)); 
double latitude = location.getLatitude(); 
double longitude = location.getLongitude(); 
+0

tak to działa ... tq ... – user3506223

6

To jest mój kod dla ciebie, mam nadzieję, to pomogę ci ... edytować, jeśli myślisz, nie jest to z poprawną sintaxis ...

Ta praca dla Androida 4.x i 5.xi 6.x, nie testuję tego w Androidzie 7

//I use this like global var to edit or get informacion about google map 
GoogleMap gMap; 

@Override 
public void onMapReady(GoogleMap googleMap) { 
    gMap = googleMap; 

if (ActivityCompat.checkSelfPermission(Activity_Map.this, android.Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(Activity_Map.this, android.Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) { 
         ActivityCompat.requestPermissions(Activity_Map.this,new String[]{android.Manifest.permission.ACCESS_FINE_LOCATION}, 1); 
        }else{ 
         if(!gMap.isMyLocationEnabled()) 
          gMap.setMyLocationEnabled(true); 

         LocationManager lm = (LocationManager)getSystemService(Context.LOCATION_SERVICE); 
         Location myLocation = lm.getLastKnownLocation(LocationManager.GPS_PROVIDER); 

         if (myLocation == null) { 
          Criteria criteria = new Criteria(); 
          criteria.setAccuracy(Criteria.ACCURACY_COARSE); 
          String provider = lm.getBestProvider(criteria, true); 
          myLocation = lm.getLastKnownLocation(provider); 
         } 

         if(myLocation!=null){ 
          LatLng userLocation = new LatLng(myLocation.getLatitude(), myLocation.getLongitude()); 
          gMap.animateCamera(CameraUpdateFactory.newLatLngZoom(userLocation, 14), 1500, null); 
         } 
        } 

} 
+0

dziękuję. To działa dla mnie. I to jest dobre podejście. –

Powiązane problemy