J'essaye actuellement de configurer un balayage de WiFi dans mon application d'androïde qui balaye des points d'accès de WiFi toutes les 30 secondes.Android - Contrôler une tâche avec Timer et TimerTask?
J'ai utilisé Timer et TimerTask pour que le scan fonctionne correctement aux intervalles dont j'ai besoin.
Cependant, je veux être en mesure d'arrêter et de lancer le balayage lorsque l'utilisateur appuie sur un bouton et que j'ai actuellement du mal à arrêter puis à redémarrer le Timer et le TimerTask.
Voici mon code
TimerTask scanTask;
final Handler handler = new Handler();
Timer t = new Timer();
public void doWifiScan(){
scanTask = new TimerTask() {
public void run() {
handler.post(new Runnable() {
public void run() {
wifiManager.scan(context);
Log.d("TIMER", "Timer set off");
}
});
}};
t.schedule(scanTask, 300, 30000);
}
public void stopScan(){
if(scanTask!=null){
Log.d("TIMER", "timer canceled");
scanTask.cancel();
}
}
Ainsi, la minuterie et démarrage de la tâche fin et l'analyse se produit toutes les 30 secondes mais je ne peux pas l'obtenir pour arrêter, je peux arrêter le chronomètre, mais la tâche est encore et scanTask. cancel() ne semble pas fonctionner non plus.
Y a-t-il une meilleure façon de procéder? Ou est-ce qu'il me manque quelque chose dans les classes Timer/TimerTask?
J'ai essayé de vérifier le booléen sur le scanTask comme celui-ci booléen tf = scanTask.cancel(); Mais maintenant je reçois une exception de pointeur nul sur cette ligne. Cependant, la tâche elle-même fonctionne bien? Je finirai par exécuter le code dans un service, alors utiliser postDelayed serait-il une option? –
De toute évidence, 'scanTask' est en cours de réinitialisation à' null', et à partir des fragments de code que vous avez présentés, il est impossible de dire pourquoi ou nhow. 'postDelayed()' n'est pas une option dans un 'Service', mais il n'est pas clair pourquoi vous voulez/avez besoin d'un' Service' dans ce cas. – CommonsWare
scanTask n'est utilisé nulle part ailleurs dans le code de l'application entière, et Timer non plus, ce que j'ai posté est l'utilisation entière du Timer t et du TimerTask scanTask. Je veux créer une application avec un minimum d'interface utilisateur, donc à partir de la lecture sur Android, un service est le moyen de le faire? –