2011-03-17 2 views
0

Я надеялся, что кто-то может пролить свет на это. Я пытаюсь понять, почему вдруг мой код из 2.2 не будет работать с 2.3. Я немного озадачен. Это код, который работает, но теперь выбрасывает исключение нулевого указателя.Геолокация Android работает в 2.2, но не 2.3

@Override 
public void onStart(Intent intent, int startId) { 
    LocationListener locationListener = new LocationListener() { 
     public void onLocationChanged(Location l){ 
     Log.i("MYSERVICE", "LocationChanged " + l); 
     } 
     public void onStatusChanged(String provider, int status, Bundle Extras) {} 
     public void onProviderEnabled(String provider){ 
     Log.i("MYSERVICE", "ProviderEnabled " + provider); 
     } 
     public void onProviderDisabled(String provider) {} 
     }; 

     lm = (LocationManager)getSystemService(Context.LOCATION_SERVICE); 
     lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, locationListener); 
    super.onStart(intent, startId); 
    String location = getLocation(); 
} 


public String getLocation() { 
    String provider = LocationManager.GPS_PROVIDER; 
    Location location = lm.getLastKnownLocation(provider); 
    Double lat = location.getLatitude(); 
    Log.i("lat", lat.toString()); 
    double lng = location.getLongitude(); 
    String writeString = lat+"&"+lng; 
    return writeString; 
} 

<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/> 

Я также использую эмулятор 2.3. Любая помощь будет принята с благодарностью, приветствия!

ответ

1

getLastKnownLocation можно вернуть null если нет предыдущего места. Если это так, вам нужно дождаться значения в onLocationChanged с зарегистрированным слушателем.

-1

кажется, что Android 2.3 не работает с «0,0» на lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, locationListener);

Вы должны установить эти 2 параметра, по меньшей мере, 1 и 1: lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, 1, 1, locationListener);

+1

Это просто неправильно. Из [docs] (http://developer.android.com/reference/android/location/LocationManager.html): Если minTime больше 0, LocationManager может потенциально отдыхать за миллисекунды minTime между обновлениями местоположения для экономии энергии. Если minDistance больше 0, местоположение будет передаваться только в том случае, если устройство перемещается с помощью счетчиков minDistance. ** Чтобы получать уведомления как можно чаще, установите оба параметра равными 0. ** –

+0

Почему вы проголосовали отрицательно? Да, это правда, что для получения уведомлений как можно чаще вы должны установить оба значения 0, но на 2.3 Gingerbread НЕ РАБОТАЕТ !!!! Я пробовал это, а на 2.2 (Froyo) работал, но на 2.3 не работал. – Alin

+2

Я проголосовал за то, что он не работает. Он работает на эмуляторе, он работает на моем устройстве, и, согласно документам, он работал с API уровня 1. Если вы собираетесь утверждать, что документация просто неверна, было бы лучше предоставить некоторые доказательства , В противном случае лучше всего предположить, что что-то не так с кодом или неправильно с устройством. –

Смежные вопросы