Я пишу службу определения местоположения с интервалом обновления для отправки обновлений местоположения на сервер. Но я пытаюсь обновить эту переменную интервала в сервисе через пользовательский ввод (AlertDialog
). Он отлично работает при жестком кодировании.Интервал обновления для службы определения местоположения Android
Я использую этот код, чтобы получить переменную интервала из класса AlertDialog
, в службе onCreate()
.
public void onCreate() {
super.onCreate();
final boolean tr=true;
new Thread(new Runnable() {
public void run() {
while (tr) {
//check your static variable here
updateInterval=ShowCurInterval.loadCurInterval(getApplicationContext());//ShowCur Interval is the Alert Dialog calss
Log.d(" INTERVAL ","Interval "+ updateInterval);
try {
Thread.sleep(10000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}}
).start();
startLocationListener(updateInterval);
}
И я могу также увидеть новое UpdateInterval значение LOG (который добавляемые Диалог оповещения). Но requestLocationUpdates()
все еще использует предварительно определенное значение updateInterval.
Вот метод startLocationListener():
public void startLocationListener(int updateInterval) {
LocationManager locManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
locManager.removeUpdates(locListener);
locManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, updateInterval, updateDistance, locListener);
Log.d(getClass().getSimpleName(), "Loclistener started, Updatetime: " + updateInterval);
Toast.makeText(getApplicationContext(), "UPDATE INTERVAL"+updateInterval,Toast.LENGTH_SHORT);
preInterval = updateInterval;
}
Кто-нибудь есть какие-либо предложения, как я могу обновить эту переменную?
@binW Edited часть за исключением:
Handler mhandler = new Handler();
mhandler.postDelayed(new Runnable(){
public void run(){
Looper.prepare();
updateInterval=SingletonManager.getInstance().loadCurInterval(getApplicationContext());
SingletonManager.getInstance().saveCurInterval(getApplicationContext(), updateInterval);
startLocationListener(updateInterval);
Log.d(" INTERVAL ","Interval "+ updateInterval);
//startChecking();
}
}, 2000);
Исключение:
04-17 03:18:55.250: E/AndroidRuntime(2146): java.lang.RuntimeException: Only one Looper may be created per thread
Спасибо заранее.
Что происходит? Работает ли только с предыдущей скоростью обновления? – 5hssba
@raju Привет. Да, он работает только с предыдущей скоростью обновления. updateInterval - глобальная переменная со значением 10000 (миллисекунда). – crtn