2015-12-13 2 views
0

Я пытаюсь получить местоположение с помощью кода ниже, но он возвращает 0.0 в качестве значений как для долготы, так и для широты.Android location 0.0 0.

public void getLocation(){ 
    LocationManager lm = (LocationManager) getSystemService(Context.LOCATION_SERVICE); 
    LocationListener locationListener = new MyLocationListener(); 

    lm.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0,0, locationListener); 
    if(isLocationEnabled(MainActivity.this, lm)){ 
     Location location = new Location(LocationManager.NETWORK_PROVIDER); 
     Log.d("LOCATION",String.valueOf(location.getLatitude())); 
     getWeather(location.getLongitude(), location.getLatitude()); 

    }else{ 
     buildDialog(MainActivity.this); 
    } 
} 

Однако, когда я печатаю место в MyLocationListener классе, он делает возвращать правильные значения. Что я делаю не так?

public class MyLocationListener implements LocationListener{ 


    @Override 
    public void onLocationChanged(Location location) { 
     double latitude = location.getLatitude(); 
     double longitude = location.getLongitude(); 

     System.out.println("LATITUDE AND LONGITUDE" + latitude + " " + longitude); 
    } 
} 

ответ

0

Вы видите правильные значения в методе onLocationChanged, потому что поставщик создан и отправлен. При создании объекта местоположения, а затем использовать, как этот

Location location = new Location(LocationManager.NETWORK_PROVIDER); 
Log.d("LOCATION",String.valueOf(location.getLatitude())); 
getWeather(location.getLongitude(), location.getLatitude()); 

широты и долготы будет 0,0, потому что его только что создали, а не устанавливать значения, проверить это Location

К сожалению, я не видел свой второй вы можете сделать, например, ниже

mLocationManager.requestSingleUpdate("network", new LocationListener() { 
@Override public void onLocationChanged(Location location) { 

    // DO YOUR REST OF WORK HERE 
} 
@Override public void onStatusChanged(String provider, int status, Bundle extras) {} 
@Override public void onProviderEnabled(String provider) {} 
@Override public void onProviderDisabled(String provider) {}}, Looper.myLooper()); 

Вы должны быть уверены, что имеете свежие данные о местоположении, поэтому используйте здесь прямо здесь. Если вы вызываете метод getLastKnownLocation без запуска метода onLocationChanged, будут указаны старые или нулевые данные.

0

Мне нужно было создать экземпляр Location от LocationManager вместо передачи в провайдере, что отражено в строке ниже.

if(isLocationEnabled(MainActivity.this, lm)){ 
       Location location = lm.getLastKnownLocation(LocationManager.NETWORK_PROVIDER); 
       Log.d("LOCATION",String.valueOf(location.getLatitude())); 
       getWeather(location.getLatitude(), location.getLongitude()); 
Смежные вопросы