У меня возникли проблемы с тем, чтобы onLocationChanged GPS мог работать в другом потоке.Я понимаю, как управлять потоком пользовательского интерфейса при вызове функции, но с помощью GPS я не вызываю эту функцию активно.
Мое намерение состоит в том, чтобы иметь вспышку света каждый раз, когда 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 ()