У меня возникли проблемы с подключением GPS onLocationChanged для работы в другом потоке. Я понимаю, как управлять потоком пользовательского интерфейса при вызове функции, но с помощью GPS, я не активно вызываю функцию.Android Callback от UI Thread
Мое намерение - иметь световую вспышку каждый раз, когда GPS получает чтение. Я включил эту функцию в Runnable. Я передал эту функцию классу, который реализует LocationListener. Затем в основном классе я начал новый поток, который вызывает requestLocationUpdates. Я надеялся, что onLocationChanged из LocationListener будет работать в другом потоке, отправить в обратный вызов и сделать необходимые эффекты пользовательского интерфейса в потоке пользовательского интерфейса. К сожалению, программа вылетает каждый раз при попытке вызвать requestLocationUpdates. Каков правильный способ сделать это?
Прямо сейчас это выглядит примерно так
Главный класс:
final Runnable changeLight = new Runnable(){
public void run(){
// do stuff
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.capture);
status = (ImageView) findViewById(R.id.status);
database = new DatabaseManager(this);
new Thread(){
public void run(){
location = (LocationManager) getSystemService(LOCATION_SERVICE);
listener = new GPSManager(database, changeLight, light, status);
location.requestLocationUpdates("gps", 10000L, 0, listener);
}
}.start();
}
LocationListener класса:
public void onLocationChanged(Location location) {
if (location.getAccuracy() <= 32.0){
light = lightColors.Green;
status.post(callback);
database.insertData(location);
}
else{
light = lightColors.Yellow;
status.post(callback);
}
}
Исключение говорит, что не удается создать обработчик внутри потока, который не называется Looper .prepare()
Я добавил код и исключение – xster