我希望创建一个应用程序,它会以固定的时间间隔更改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很新,有点困惑。
答案 0 :(得分:7)
看起来你正在使用计时器错误。如果要重复它,则需要将初始延迟指定为第二个参数,将间隔指定为第三个参数。 Timer.schedule(timertask, initial delay, interval between recurrences);
注意:我在谈论您对myTimer.schedule(object, interval);
答案 1 :(得分:0)
尝试代替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);
}
//...
}