Dans mon application, un utilisateur demande des mises à jour de position. Lorsque cela se produit, l'activité principale démarre un service qui lancera une demande de localisation.Problèmes d'emplacement avec Service et IntentService
Mon problème est, si les services sont démarrés, disons 3 fois dans une période de deux minutes, alors il ne fonctionne pas correctement. Donc, en gros, j'ai besoin du service pour mettre la demande de démarrage en attente jusqu'à ce que le démarrage actuel soit complètement terminé.
Chaque fois que mon service est démarré, il peut prendre jusqu'à dix minutes pour se terminer et le service répond différemment à chaque demande de démarrage en fonction des données d'intention qui lui ont été transmises. Je préférerais qu'il y ait une demande de localisation pour chacune des trois demandes de démarrage survenues dans la période de deux minutes, mais les données d'intention pourraient être différentes de chacune des trois demandes de démarrage.
Alors, j'ai essayé d'utiliser IntentService pour surmonter cela et gérer les trois demandes une à la fois, mais
LocationManager.requestLocationUpdates(...)
est pas appelé. Je comprends que cela est probablement dû au fait que onHandleIntent (...) se termine presque immédiatement et ne donne essentiellement pas l'heure de la demande de localisation pour répondre. J'ai un gestionnaire qui arrête la demande de localisation après 7 minutes (3 minutes pour les tests), puis les informations de localisation sont transmises à d'autres méthodes qui retournent les mises à jour de l'interface utilisateur à l'utilisateur. Les mises à jour de l'interface utilisateur retournent, elles sont simplement nulles car les mises à jour de l'emplacement échouent. Je pense que je pourrais utiliser le onHandleIntent dans un IntentService pour démarrer mon service et lui transmettre les données d'intention, mais cela semble être une très mauvaise pratique, et il y a probablement une meilleure façon de le faire. EDIT: Cela ne fonctionnera certainement pas car onHandleIntent démarrera immédiatement my locationService, il n'y aura donc pas de période d'attente.
De même, tous les Toasts appelés dans onHandleIntent ne s'affichent pas du tout, bien que tout ce que mon onCreate() fonctionne fonctionne comme il se doit.
J'ai vraiment du mal à trouver une réponse à cette question, et toute aide serait grandement appréciée. Voici l'essentiel de mon code:
public class myService extends IntentService {
public findMyDroidService() {
super("findMyDroidService");
}
@Override
protected void onHandleIntent(Intent intent){
intent.getExtras();
fromIntentString = intent.getStringExtra("toIntentStringExtra");
Toast.makeText(this, fromIntentString, Toast.LENGTH_SHORT).show();
Toast.makeText(this, "Intent Handled", Toast.LENGTH_SHORT).show();
locMan.requestLocationUpdates(locListener,...);
}
@Override
public void onCreate(){
super.onCreate();
locListener = new LocationListener(){
//code goes here
}
}
}
En outre, ma position d'écoute est instancié dans le onCreate();
Pour mon problème de pain grillé j'ai trouvé http://stackoverflow.com/questions/3955410/create-toast-from-intentservice mais je ne me soucie pas trop de la chose du toast, donc je ne l'ai pas essayé. – Jakar