Android应用程序使用定时器定期更换壁纸
我希望创建一个应用程序,可以每隔固定时间(比如每小时左右)更改Android设备的壁纸。目前在我的代码中,我启动了一个服务并使用了一个计时器对象。计时器对象将定期调用并更改墙纸 这是我目前正在使用的代码。墙纸只换一次,以后再换。请让我知道我该怎么做Android应用程序使用定时器定期更换壁纸,android,wallpaper,Android,Wallpaper,我希望创建一个应用程序,可以每隔固定时间(比如每小时左右)更改Android设备的壁纸。目前在我的代码中,我启动了一个服务并使用了一个计时器对象。计时器对象将定期调用并更改墙纸 这是我目前正在使用的代码。墙纸只换一次,以后再换。请让我知道我该怎么做 public class Wallpaper extends Service { Timer mytimer; int interval=60000; Drawable drawable; WallpaperMana
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或处理程序来实现这一点?我对安卓很陌生,有点困惑 看来你的计时器用错了。如果希望它再次出现,则需要将初始延迟指定为第二个参数,将间隔指定为第三个参数<代码>定时器计划(定时器任务、初始延迟、重复间隔)代码>
注意:我说的是您对
myTimer.schedule(对象,间隔)的调用代码>尝试代替计时器
classScheduledFuture
这有助于我解决计时器任务的所有问题
祝你好运
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);
}
//...
}
立即启动延迟设置为0。:)谢谢。这似乎正在起作用。。还有一个myTimer.schedule()方法只有两个参数,所以这并没有给我一个错误。无论如何,我很高兴我不必使用Handler等。是的!只使用两个参数就可以创建一个一次性计时器。有时有用!然而,我发现当设备处于睡眠模式时,服务会停止。因此,我最终将不得不使用AlarmManager