2012-03-16 1 views
5

Android 기기의 배경 화면을 일정한 간격으로 (예 : 1 시간마다) 변경하는 앱을 만들고 싶습니다. 현재 내 코드에서는 서비스를 시작하고 Timer 객체를 사용하고 있습니다. Timer 객체는 정기적 인 간격으로 호출되어 배경 무늬가 변경됩니다.Android 앱이 타이머를 사용하여 일정한 간격으로 배경 화면을 변경합니다.

이것은 현재 사용중인 코드입니다. 벽지는 한 번만 변경되고 이후에는 변경되지 않습니다. 제가 어떻게해야하는지 알려주세요.

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; 
    } 
} 

또한이 작업을 수행하려면 AlarmManager 또는 처리기를 사용해야합니까? 나는 Android에 아주 익숙하고 조금 혼란 스럽다.

답변

7

타이머를 잘못 사용하고있는 것처럼 보입니다. 반복 되길 원하면 두 번째 인수로 초기 지연을 지정하고 세 번째 인수로 간격을 지정해야합니다. Timer.schedule(timertask, initial delay, interval between recurrences);

참고 : 나는 타이머 작업을
행운을 빕니다 모든 문제를 해결하기 위해이 나를 위해 도움이 ScheduledFuture
Timer 클래스 대신 시도 myTimer.schedule(object, interval);

+1

즉시 시작을위한 지연을 0으로 설정하십시오. :) – Calvin

+0

고마워.이게 지금 일하는 것 같아. 단지 두 개의 인자를 가진 다른 myTimer.schedule() 메쏘드가있다. 그래서 나에게 오류를주지 않았다. 어쨌든 Handler 등을 사용할 필요가 없기 때문에 기쁩니다. – ambit

+0

Yup! 두 개의 인수 만 사용하면 원샷 타이머가됩니다. 때로는 유용합니다! –

0

에 전화에 대해 얘기 해요!

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); 
    } 
    //... 
}