Actualmente estoy tratando de configurar un escaneo WiFi en mi aplicación Android que escanea puntos de acceso WiFi cada 30 segundos.Android - ¿Controla una tarea con Timer y TimerTask?
He utilizado Timer y TimerTask para que el escaneo funcione correctamente en los intervalos que necesito.
Sin embargo, quiero poder detener e iniciar el escaneo cuando el usuario presiona un botón y actualmente tengo problemas para detener y luego reiniciar el temporizador y TimerTask.
Aquí está mi código
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();
}
}
Así que el temporizador y el inicio de la tarea bien y la exploración ocurre cada 30 segundos, sin embargo no puedo conseguir que se detenga, puedo detener el temporizador, pero la tarea todavía se produce y scanTask. cancel() tampoco parece funcionar.
¿Hay una mejor manera de hacerlo? ¿O me falta algo en las clases de Timer/TimerTask?
Traté de comprobar el valor booleano en la scanTask como esto booleano tf = scanTask.cancel(); Pero ahora obtengo una excepción de puntero nulo en esa línea. Sin embargo, la tarea en sí funciona bien? Eventualmente estaré ejecutando el código en un Servicio, ¿así que usar postDelayed sería una opción? –
Obviamente, 'scanTask' se restablece a' null', y de los fragmentos de código que ha presentado es imposible decir por qué o nhow. 'postDelayed()' no es una opción en un 'Servicio', pero no está claro por qué quiere/necesita un' Servicio' en este caso. – CommonsWare
scanTask no se utiliza en ningún otro lugar en el código de toda la aplicación, ni es contador de tiempo, lo que he publicado es todo el uso del temporizador T y la TimerTask scanTask. Quiero crear una aplicación con una IU mínima o nula, así que al leer acerca de Android, ¿un servicio es la manera de hacerlo? –