2011-01-20 3 views
8

Я Тринг использовать GPS на андроид эмулятор, я следующий код:Android - Невозможно получить расположение GPS на эмуляторе

public class NL extends Activity { 

private LocationManager locmgr = null; 

@Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.nl); 

     locmgr = (LocationManager) getSystemService(Context.LOCATION_SERVICE); 

     Criteria crit = new Criteria(); 
     crit.setAccuracy(Criteria.ACCURACY_FINE); 
     String provider = locmgr.getBestProvider(crit, true); 
     Location loc = locmgr.getLastKnownLocation(provider); 


     Toast msg = Toast.makeText(this, "Lon: " + Double.toString(loc.getLongitude()) + " Lat: " + Double.toString(loc.getLatitude()), Toast.LENGTH_SHORT); 
     msg.show(); 
    } 
} 

я добавил следующую строку на манифест:

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

и я установить местоположение GPS с помощью метода DDMS и либо с помощью метода исправления гео, но когда я запускаю код, я получаю NullPointerExeption на Toast линии, вероятно, причину LOC является нулевым ,

Я не понимаю, где ошибка ... вы можете мне помочь?


ОБНОВЛЕНИЕ!

Спасибо за вашу помощь, теперь я использую следующий код, и я не получаю никаких ошибок, но он не запускает код внутри onChangeLocation ... он не запускает Toast и не возвращает никаких сообщение в журнале!

public class NL extends Activity { 

     private LocationManager locmgr = null; 

     @Override 
     public void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 
      setContentView(R.layout.nl); 

      locmgr = (LocationManager) getSystemService(Context.LOCATION_SERVICE); 

     // Define a listener that responds to location updates 
      LocationListener locationListener = new LocationListener() { 
       public void onLocationChanged(Location loc) { 
        // Called when a new location is found by the network location provider. 
        Log.i("NOTIFICATION","onLocationChenged Triggered"); 

        Toast msg = Toast.makeText(NetworkLocator.this, "Lon: " + Double.toString(loc.getLongitude()) + " Lat: " + Double.toString(loc.getLatitude()), Toast.LENGTH_SHORT); 
        msg.show(); 
       } 

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

       public void onProviderEnabled(String provider) {} 

       public void onProviderDisabled(String provider) {} 
       }; 

      // Register the listener with the Location Manager to receive location updates 
      locmgr.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, locationListener); 
     } 
    } 

Спасибо!

+2

вы проверить, если * locmgr.getBestProvider * фактически возвращает "GPS"? в любом случае, вы должны обязательно реализовать * LocationListener * и передать его в LocationManager с помощью * requestLocationUpdates() * –

+0

getBestProvider вернуть «gps». иметь, чтобы добавить locationlistener, даже если я пытаюсь получить locatio с lastKnownLocation? спасибо за вашу помощь –

+0

@Marco Faion Пожалуйста, держите ответы ур обновленные ... Я уже один раз отвечал вам, и вы не дали никакой обратной связи по ответу! > 'http: // stackoverflow.com/questions/4591765/android-sqlite-database-method-undefined-fot-type/4591843 # 4591843' – Beasly

ответ

7

нашел решение:

LocationManager.NETWORK_PROVIDER неправильно.

коррекция: LocationManager.GPS_PROVIDER

+1

По моему опыту, эмулятор не реагирует на изменения местоположения, отправленные через DDMS, когда поставщик установлен в NETWORK_PROVIDER, но если он установлен на GPS_PROVIDER, как вы отметили. Это похоже на al подражание в эмуляторе для меня или, по крайней мере, поведение, которое это не очевидно. – Mick

1

, если все, что вы, что вы описали это делается, чем, может быть, вы, вероятно, не не ур GPS на в emulator.go для настройки: -> Расположение и безопасность: -> и использовать GPS Satélites должны быть проверены


отредактировал: ithink вам нужно использовать диспетчер местоположений без критериев.



LocationManager mlocManager = (LocationManager)getSystemService(Context.LOCATION_SERVICE); 

loc=mlocManager.getLastKnownLocation(LocationManager.GPS_PROVIDER); 

------ чем попытаться долго. и лат.

+0

проверяется «использование gps-сателлитов» –

0

Вы уверены, что ваше эмулируемое устройство действительно поддерживает GPS? Я думаю, что было дополнительным вариантом ...

Это может помочь также:

Спасибо! Для всех: вы можете изменить объект сборки для своего проекта в любое время в Eclipse: щелкните правой кнопкой мыши проект в обозревателе пакетов, выберите «Свойства»> «Android», а затем выберите «API Google» для Project Target. - Разработчики, работающие с настройками культуры, отличными от английского, могут заметить, что нажатие кнопки «Отправить» в «Элементах управления местоположением» не отправляет новое местоположение в эмулятор Android. Это исправлено с предстоящим выпуском 7 инструментов SDK; для быстрого исправления вы можете изменить свой язык на «en». (См code.google.com/p/android/issues/detail?id=915 подробности.) - Патрик де Kleijn

Источник: GPS on emulator doesn't get the geo fix - Android

8

Эмулятор просто не имеет какое-либо места на начало. Согласно doc, метод getLastKnownLocation может возвращать null, так что это нормально. В этом случае вам нужно ждать обновления местоположения (вы можете запросить методLocationUpdates пользователя из LocationManager).Вы можете запустить обновление местоположения на модуль GPS эмулятора с помощью следующей команды:

adb -e emu geo fix 50 50 
Смежные вопросы