1

我正在创建应用程序,其中有一个复选框允许用户在 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 秒后会发生什么)?这种方法可能是错误的。谁能指导我如何做到这一点?提前致谢。

4

0 回答 0