如何使用WorkManager定期更改墙纸?

时间:2018-08-12 08:12:06

标签: android android-wallpaper

我正在尝试定期更改Android的墙纸。

我使用WorkManager来运行一个工作程序,该工作程序在后台下载墙纸并进行设置。

只要应用程序正在运行,壁纸就会被更改。当我关闭墙纸时,它停止了。我正在Workmanager中使用PeriodcWork。

这是我的代码

public class OneTimeWorker extends Worker {
Context context = getApplicationContext();
private String URL;
@NonNull
@Override
public Result doWork() {
    new FetchWallpaper().execute();
    return Result.SUCCESS;
}
private class FetchWallpaper extends AsyncTask<Void, Void, Bitmap>
{
    @Override
    protected Bitmap doInBackground(Void... voids) {
        String imageUrl="";
        Bitmap result = null;
        try
        {
            URL = "myurl.com";
            OkHttpClient client = new OkHttpClient();
            Request request = new Request.Builder()
                    .url(URL)
                    .build();
            Response responses = null;
            try {
                responses = client
                        .newCall(request)
                        .execute();
                String jsonData = responses.body().string();

                JSONArray jsonArr = new JSONArray(jsonData);
                JSONObject c = jsonArr.getJSONObject(new Random().nextInt(jsonArr.length()));

                imageUrl = c.getString("wallpaper");

                result = Picasso.with(getApplicationContext())
                        .load(imageUrl)
                        .get();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
        catch (Exception e)
        {
        }
        return result;
    }
    @Override
    protected void onPostExecute(Bitmap bitmap) {
        super.onPostExecute(bitmap);
            WallpaperManager wallpaperManager = WallpaperManager.getInstance(getApplicationContext());
            try {
                wallpaperManager.setBitmap(bitmap);
            } catch (Exception ex) {
                ex.printStackTrace();
            }
    }

}
}

2 个答案:

答案 0 :(得分:1)

您最好使用Android-Job by Evernote

内部使用WorkManager,可提供平滑,美观的链接方法和可靠性,同时易于实现。

自动在 JobManager / WorkManager / GCM / AlarmManager 之间进行选择,以确保您的代码必须执行。

我自己使用它,这很好。

答案 1 :(得分:0)

我为您提供了使用WallpaperManager和WallpaperService来管理用户墙纸的功能。