2012-03-16 36 views
5

Tôi muốn tạo một ứng dụng, điều này sẽ thay đổi hình nền của thiết bị Android theo khoảng thời gian cố định. Hiện tại trong mã của tôi, tôi bắt đầu một dịch vụ và đang sử dụng một đối tượng Timer. Đối tượng Timer sẽ được gọi vào khoảng thời gian đều đặn và thay đổi hình nền.Ứng dụng Android để thay đổi hình nền theo các khoảng thời gian đều đặn bằng cách sử dụng Timer

Đây là mã tôi đang sử dụng hiện tại. Các hình nền được thay đổi chỉ một lần và không sau đó. Vui lòng cho tôi biết tôi nên làm gì?

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

Ngoài ra, tôi có cần sử dụng Trình quản lý cảnh báo hoặc Trình xử lý để đạt được điều này không? Tôi khá mới với Android và hơi bối rối.

Trả lời

7

Dường như bạn đang sử dụng bộ hẹn giờ sai. Nếu bạn muốn nó lặp lại, bạn cần phải xác định độ trễ ban đầu làm đối số thứ hai và khoảng thời gian là thứ ba. Timer.schedule(timertask, initial delay, interval between recurrences);

Lưu ý: Tôi đang nói về cuộc gọi của bạn để myTimer.schedule(object, interval);

+1

Đặt 0 cho sự chậm trễ để bắt đầu ngay lập tức. :) – Calvin

+0

Cảm ơn..này dường như đang hoạt động .. Có một số phương thức myTimer.schedule() khác chỉ với hai đối số, vì vậy điều đó không gây ra lỗi cho tôi. Dù sao, tôi hạnh phúc vì tôi không phải sử dụng Handler, v.v. – ambit

+0

Yup! Chỉ sử dụng hai đối số tạo một bộ hẹn giờ một lần. Đôi khi hữu ích! –

0

Hãy thử thay vì Timer lớp ScheduledFuture
này đã giúp cho tôi để giải quyết tất cả các vấn đề với công việc hẹn giờ
Chúc may mắn!

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); 
    } 
    //... 
} 
Các vấn đề liên quan