2012-03-16 12 views
5

Deseo crear una aplicación, que cambiaría el fondo de pantalla del dispositivo Android a intervalos fijos, por ejemplo, cada hora aproximadamente. Actualmente en mi código, inicio un servicio y estoy usando un objeto Timer. El objeto Timer se invocará a intervalos regulares y cambiará el fondo de pantalla.Aplicación de Android para cambiar el fondo de pantalla a intervalos regulares usando el temporizador

Este es el código que estoy usando actualmente. El fondo de pantalla se cambia solo una vez y no después. Por favor, hágame saber qué debo hacer?

public class Wallpaper extends Service { 

    Timer mytimer; 
    int interval=60000; 
    Drawable drawable; 
    WallpaperManager wpm; 
    int prev=1; 

    @Override 
    public void onCreate() { 
     super.onCreate(); 
     mytimer=new Timer(); 
     wpm=WallpaperManager.getInstance(Wallpaper.this); 
    } 



    @Override 
    public int onStartCommand(Intent intent, int flags, int startId) { 
     mytimer.schedule(new TimerTask() { 
      @Override 
      public void run() { 

       if(prev==1){ 
        drawable = getResources().getDrawable(R.drawable.two); 
        prev=2; 
       } 
       else if(prev==2){ 
        drawable = getResources().getDrawable(R.drawable.three); 
        prev=3; 
       } 
       else{ 
        drawable = getResources().getDrawable(R.drawable.one); 
        prev=1; 
       } 


       Bitmap wallpaper=((BitmapDrawable)drawable).getBitmap(); 

       try { 
        wpm.setBitmap(wallpaper); 

       } catch (IOException e) { 
        e.printStackTrace(); 
       } 

      } 
     }, interval); 

     return super.onStartCommand(intent, flags, startId); 
    } 

    @Override 
    public IBinder onBind(Intent arg0) { 
     return null; 
    } 
} 

Además, ¿necesito usar un AlarmManager o Handler para lograr esto? Soy bastante nuevo en Android y estoy un poco confundido.

Respuesta

7

Parece que está utilizando el temporizador incorrecto. Si desea que se repita, debe especificar un retraso inicial como segundo argumento y un intervalo como el tercero. Timer.schedule(timertask, initial delay, interval between recurrences);

Nota: Estoy hablando de su llamada a myTimer.schedule(object, interval);

+1

Set 0 para la demora para el inicio inmediato. :) – Calvin

+0

Gracias ... esto parece estar funcionando ahora ... Hay algún otro método myTimer.schedule() con solo dos argumentos, por lo que no me estaba dando un error. De todos modos, estoy feliz de no tener que usar Handler, etc. – ambit

+0

¡Sí! El uso de solo dos argumentos crea un temporizador de una sola vez. ¡A veces es útil! –

0

Trate en lugar de Timer clase ScheduledFuture
Esto ayudó para mí para resolver todos los problemas con las tareas del temporizador
Buena suerte!

private ScheduledFuture mytimer; 

//... 

@Override 
public int onStartCommand(Intent intent, int flags, int startId) { 
    ScheduledExecutorService timer = Executors.newScheduledThreadPool(1); 
    mytimer = timer.scheduleWithFixedDelay(new TimerTask() { 
     @Override 
     public void run() { 
      //... 
     } 
    }, 0, interval, TimeUnit.MILLISECONDS); 
    return super.onStartCommand(intent, flags, startId); 
} 

//... 

@Override 
public void onDestroy() { 
    super.onDestroy(); 
    if (mytimer != null) { 
     mytimer.cancel(true); 
    } 
    //... 
} 
Cuestiones relacionadas