Android: Minuterie dans un Service d'arrière-plan

Salutations,

Je suis en train de mettre en œuvre une minuterie qui envoie les coordonnées GPS de mon serveur toutes les 10 secondes.

Voici l'extrait de code dans le Service, je suis la mise en œuvre:

@Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        Timer timer=new Timer();
        TimerTask tt=new TimerTask(){
            @Override
            public void run() {
                Location loc=lm.getLastKnownLocation(LocationManager.GPS_PROVIDER);
                sendCoords(String.valueOf(loc.getLatitude()), String.valueOf(loc.getLongitude()));
                Toast.LENGTH_SHORT).show();
                Log.i("EOH",String.valueOf(loc.getLatitude()));
            }
        };
        timer.schedule(tt,0,10000);

        return START_STICKY;
    }

Maintenant, le problème est que quoi que ce soit à l'intérieur de run() provoque mon app fermée de force.

Voici le LogCat dump:

12-28 18:44:18.284:
ERREUR/AndroidRuntime(6537): FATAL
EXCEPTION: Minuterie-0 12-28 18:44:18.284:
ERREUR/AndroidRuntime(6537):
java.lang.RuntimeException: ne Peut pas
gestionnaire de créer à l'intérieur de thread qui a
pas appelé Looper.préparer() 12-28
18:44:18.284:
ERREUR/AndroidRuntime(6537): à
android.os.Gestionnaire d'.(Handler.java:121)
12-28 18:44:18.284:
ERREUR/AndroidRuntime(6537): à
prestocab.le pilote.Arrière-plan$2.(En arrière-plan.java:83)
12-28 18:44:18.284:
ERREUR/AndroidRuntime(6537): à
prestocab.le pilote.Arrière-plan.sendCoords(arrière-plan.java:83)
12-28 18:44:18.284:
ERREUR/AndroidRuntime(6537): à
prestocab.le pilote.Arrière-plan$3.exécuter(en arrière-plan.java:114)
12-28 18:44:18.284:
ERREUR/AndroidRuntime(6537): à
java.util.Minuterie$TimerImpl.exécuter(Minuterie.java:289)
12-28 18:44:18.554:
ERREUR/WindowManager(1310): de retour dans
removeWindowLocked

Quelqu'un peut-il suggérer une solution pour cela?

J'ai essayé d'utiliser le locationManager onLocationChanged() de la fonction, mais je ne peux pas définir l'intervalle de 10 secondes. Apparemment, le temps spécifié est seulement un guide et le système d'exploitation détermine ce qui est le meilleur. Même quand j'ai mis l'intervalle de 100 secondes, il me donne l'emplacement de chaque seconde. C'est la raison pour moi, à l'aide d'une minuterie.

J'espère que quelqu'un peut suggérer quelque chose.

Merci d'avance,

Êtes-vous sûr "lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, 5000, 1, lr);" n'aide pas ? le troisième paramètre est la distance minimale pour déclencher un autre emplacement de mise à jour, tandis que le deuxième paramètre est l'un vous êtes après un minimum de temps entre l'emplacement des mises à jour. Selon la première condition est remplie dans le premier, vous bénéficiez d'un emplacement de mise à jour.
Apparemment, à partir de ce post, stackoverflow.com/questions/4418018/... les paramètres sont seulement des indicateurs et pour chaque périphérique décide ce qui est le mieux...

OriginalL'auteur Eamorr | 2010-12-28