Android-приложение для регулярной смены обоев с помощью таймера - PullRequest
5 голосов
/ 16 марта 2012

Я хочу создать приложение, которое будет менять фоновые рисунки устройства Android через фиксированные интервалы, скажем, каждый час или около того В настоящее время в моем коде я запускаю службу и использую объект Timer. Объект Timer будет вызываться через равные промежутки времени и менять обои.

Это код, который я использую в настоящее время. Обои меняются только один раз, а не после этого. Пожалуйста, дайте мне знать, что мне делать?

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 или Handler для достижения этой цели? Я совсем новичок в Android и немного смущен.

Ответы [ 2 ]

7 голосов
/ 16 марта 2012

Похоже, вы неправильно используете таймер.Если вы хотите, чтобы это повторялось, вам нужно указать начальную задержку в качестве второго аргумента и интервал в качестве третьего.Timer.schedule(timertask, initial delay, interval between recurrences);

Примечание: я говорю о вашем звонке на myTimer.schedule(object, interval);

0 голосов
/ 03 сентября 2017

Попробуйте вместо Timer класс ScheduledFuture
Это помогло мне решить все проблемы с задачами таймера
Удачи!

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