Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/195.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android应用程序使用定时器定期更换壁纸_Android_Wallpaper - Fatal编程技术网

Android应用程序使用定时器定期更换壁纸

Android应用程序使用定时器定期更换壁纸,android,wallpaper,Android,Wallpaper,我希望创建一个应用程序,可以每隔固定时间(比如每小时左右)更改Android设备的壁纸。目前在我的代码中,我启动了一个服务并使用了一个计时器对象。计时器对象将定期调用并更改墙纸 这是我目前正在使用的代码。墙纸只换一次,以后再换。请让我知道我该怎么做 public class Wallpaper extends Service { Timer mytimer; int interval=60000; Drawable drawable; WallpaperMana

我希望创建一个应用程序,可以每隔固定时间(比如每小时左右)更改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或处理程序来实现这一点?我对安卓很陌生,有点困惑

看来你的计时器用错了。如果希望它再次出现,则需要将初始延迟指定为第二个参数,将间隔指定为第三个参数<代码>定时器计划(定时器任务、初始延迟、重复间隔)


注意:我说的是您对
myTimer.schedule(对象,间隔)的调用

尝试代替
计时器
class
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);
    }
    //...
}

立即启动延迟设置为0。:)谢谢。这似乎正在起作用。。还有一个myTimer.schedule()方法只有两个参数,所以这并没有给我一个错误。无论如何,我很高兴我不必使用Handler等。是的!只使用两个参数就可以创建一个一次性计时器。有时有用!然而,我发现当设备处于睡眠模式时,服务会停止。因此,我最终将不得不使用AlarmManager