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