J'ai des difficultés à faire fonctionner le GPS onLocationChanged sur un thread différent. Je comprends comment gérer le thread UI lorsque j'appelle une fonction mais avec le GPS, je n'appelle pas la fonction de façon active.Rappel GPS Android sur le fil de l'interface utilisateur
Mon intention est d'avoir un flash lumineux chaque fois que le GPS reçoit une lecture. J'ai mis cette fonction dans un runnable. J'ai passé cette fonction à une classe qui implémente LocationListener. Ensuite, dans la classe principale, j'ai démarré un nouveau thread qui appelle requestLocationUpdates. J'espérais que onLocationChanged de LocationListener s'exécuterait dans un thread différent, publier dans le rappel et effectuer les effets d'interface utilisateur nécessaires dans le thread d'interface utilisateur. Malheureusement, le programme se bloque chaque fois qu'il essaie d'appeler requestLocationUpdates. Quelle est la bonne façon de le faire?
En ce moment, il ressemble à quelque chose comme ça
Classe principale:
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();
}
classe 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);
}
}
L'exception dit ne peut pas créer gestionnaire intérieur thread qui n'a pas appelé Looper .prepare()
J'ai ajouté le code et l'exception – xster