Привет,Android: Таймер в фоновом режиме
Я пытаюсь реализовать таймер, который отправляет GPS-координаты на мой сервер каждые 10 секунд.
Вот фрагмент кода из службы я реализующей:
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
Timer timer=new Timer();
TimerTask tt=new TimerTask(){
@Override
public void run() {
Location loc=lm.getLastKnownLocation(LocationManager.GPS_PROVIDER);
sendCoords(String.valueOf(loc.getLatitude()), String.valueOf(loc.getLongitude()));
Toast.LENGTH_SHORT).show();
Log.i("EOH",String.valueOf(loc.getLatitude()));
}
};
timer.schedule(tt,0,10000);
return START_STICKY;
}
Теперь проблема заключается в том, что что-то внутри бега() вызывает мое приложение, чтобы заставить закрытым.
Здесь LogCat свалка:
12-28 18: 44: 18,284: ОШИБКА/AndroidRuntime (6537): ФАТАЛЬНАЯ ИСКЛЮЧЕНИЕ: Таймер-0 12-28 18: 44: 18,284: ERROR/AndroidRuntime (6537): java.lang.RuntimeException: не Можно создать обработчик внутри потока, который имеет не называется Looper.prepare() 12-28 18: 44: 18,284: ERROR/AndroidRuntime (6537): на android.os.Handler. (Handler.java:121) 12-28 18: 44: 18.284: ОШИБКА/AndroidRuntime (6537): в prestocab.driver.Background $ 2 (Background.java:83) 12-28. 18: 44: 18,284: ОШИБКА/AndroidRuntime (6537): в prestocab.driver.Background. sendCoords (Background.java:83) 12-28 18: 44: 18.284: ОШИБКА/AndroidRuntime (6537): at prestocab.driver.Background $ 3.run (Background.java:114) 12-28 18:44 : 18,284: ОШИБКА/AndroidRuntime (6537): в java.util.Timer $ TimerImpl.run (Timer.java:289) 12-28 18: 44: 18,554: ERROR/WindowManager (1310): возвращение в removeWindowLocked
Может ли кто-нибудь предложить исправить это?
Я попытался использовать функцию locationManager onLocationChanged(), но не могу установить интервал до 10 секунд. По-видимому, указанное время является лишь руководством, и ОС определяет, что лучше. Даже когда я устанавливаю интервал до 100 секунд, он дает мне место каждую секунду или около того. Отсюда и причина для использования таймера.
Я надеюсь, что кто-то может что-то предложить.
Спасибо заранее,
Вы уверены, что "lm.requestLocationUpdates (LocationManager.GPS_PROVIDER, 5000, 1, lr);" не помогает ? третий параметр - это минимальное расстояние для запуска другого обновления местоположения, тогда как второй параметр - тот, который вы после - минимальное время между обновлениями местоположения. В зависимости от того, какое условие выполняется в первую очередь, вы получаете обновление местоположения. – kellogs
@kellogs По-видимому, из этого сообщения http://stackoverflow.com/questions/4418018/android-locationmanager-requestlocationupdates-doesnt-respect-params параметры являются только индикаторами, и каждое отдельное устройство решает, что лучше ... – Eamorr