如何使用JobScheduler每30秒自动更换一次壁纸?

时间:2018-03-30 11:08:10

标签: android android-glide android-jobscheduler android-wallpaper jobservice

我正在创建应用程序,其中有一个复选框选项,允许用户在30秒后自动更改壁纸。我正在使用JobScheduler,并通过将它们序列化为JsonArray然后传递给String并使用PersistanceBundle传递它来传递图像的arraylist:

JsonArray result = (JsonArray) new Gson().toJsonTree(wallpaperModelArrayList,
                        new TypeToken<List<WallpaperModel>>() {
                        }.getType());
PersistableBundle persistableBundle=new PersistableBundle();
persistableBundle.putString("wallpaper",result.toString());
mJobScheduler = (JobScheduler)
                        getSystemService(Context.JOB_SCHEDULER_SERVICE);
                JobInfo.Builder builder = new JobInfo.Builder(1,
                        new ComponentName(getPackageName(),
                                JobSchedulerService.class.getName()));
                builder.setExtras(persistableBundle);
                builder.setPeriodic(30000);

我的JobService课程:

public class JobSchedulerService extends JobService {

private static final String TAG = "JobSchedulerService";
private String images;

@Override
public boolean onStartJob(JobParameters params) {
    Log.i(TAG, "onStartJob:");
    images = params.getExtras().getString("wallpaper");
    changeWallpaper(params);
    return true;
}

@Override
public boolean onStopJob(JobParameters params) {
    //Log.i(TAG, "onStopJob:");
    return true;
}

private void changeWallpaper(JobParameters params) {

    Gson gson = new Gson();
    Type listType = new TypeToken<List<WallpaperModel>>(){}.getType();
    List<WallpaperModel> list = gson.fromJson(images, listType);

    Glide.with(this)
            .load(list.get(0).getUrlImage())
            .asBitmap()
            .into(new SimpleTarget<Bitmap>() {
                @Override
                public void onResourceReady(Bitmap resource, GlideAnimation<? super
                        Bitmap> glideAnimation) {
                    try {
                        WallpaperManager.getInstance(getApplicationContext()).setBitmap(resource);
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
            });
    jobFinished(params, false);
}

}

我不知道如何在JobService列表中每隔30秒后设置一个壁纸(图片一张一张)?有人能告诉我setperiodic函数是如何工作的(30秒后会发生什么)?这种方法可能是错误的。任何人都可以指导我如何做到这一点?提前谢谢。

0 个答案:

没有答案