2013-06-17 5 views
0

Почему значение моей переменной location null? Я правильно настраиваю свой LocationManager.Почему мое местоположение недействительно? - Android

Вот мой исходный код:

//Get the current location 
    locationManager = (LocationManager) getSystemService(LOCATION_SERVICE); 
    myCriteria = new Criteria(); 
    String provider = locationManager.getBestProvider(myCriteria, true); 
    Location location = locationManager.getLastKnownLocation(provider); 
    boolean isGpsEnabled = locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER); 
    boolean isNetworkEnabled = locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER); 
    //Location location; 

    if (isGpsEnabled) { 
     location = locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER); 
    } 
    else { 
     location = locationManager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER); 
    } 

    Log.i(TAG, "Provider is: "+provider); 
    Log.i(TAG, "Location is: "+location); 

Вот выход LogCat:

06-17 10:40:52.637: D/dalvikvm(15106): GC_FOR_ALLOC freed 534K, 7% free 10586K/11360K, paused 16ms, total 16ms 
06-17 10:40:52.677: I/OGT.RideTracking(15106): Provider is: gps 
06-17 10:40:52.677: I/OGT.RideTracking(15106): Location is: null 
06-17 10:40:52.677: D/AndroidRuntime(15106): Shutting down VM 

Что случилось с моим кодом?

+0

возможно дубликат [NullPointerException - Location - метод getLatitude()] (http://stackoverflow.com/questions/17150066/nullpointerexception-location-getlatitude-method) – Blackbelt

+1

там не является гарантией того, что 'getLastKnownLocation' предоставляет вам местоположение. Если это «null», вы должны вызвать 'locationManager.requestLocationUpdates()' и ждать, пока поставщик получит местоположение. – rciovati

+2

У вас есть права доступа ACCESS_FINE_LOCATION и ACCESS_COARSE_LOCATION? – neo

ответ

0
// getting GPS status 
isGPSEnabled = locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER); 

Проверьте, включен ли gps.

+0

Я уже делаю это в коде выше! – user268397

+0

Но вы вызываете Location location = locationManager.getLastKnownLocation (поставщик); без проверки включенности gps. – neo

1

Попробуйте этот код

Эти переменные являются переменными класса

LocationManager locManager; 
LocationListener locListener; 

Добавьте этот код на create метод

locManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, locListener); 

В этом же файле добавьте этот код

public class MyLocationListener implements LocationListener { 

    public void onLocationChanged(Location loc) { 
     Log.d("tag", "Finding Latitude"); 
     double lat = loc.getLatitude(); 
     Log.d("tag", "Lat: " + String.valueOf(lat)); 
     Log.d("tag", "Finding Longitude"); 
     double lon = loc.getLongitude(); 
     Log.d("tag", "Lon: " + String.valueOf(lon)); 
     Log.i(Tag, loc.toString()); 
     String Text = "Lat: " + lat + "\nLon: " + lon; 

     // Display location 
     locManager.removeUpdates(locListener); 
    } 

    public void onProviderDisabled(String provider) { 

    } 

    public void onProviderEnabled(String provider) { 

    } 

    public void onStatusChanged(String provider, int status, Bundle extras) { 

    } 
} 

AndroidManifest.xml Требуется

<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> 
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 
Смежные вопросы