Как периодически менять обои с помощью WorkManager?

Я пытаюсь изменить обои Android, в некоторый периодический интервал.

Я использовал WorkManager для запуска работника, который загружает обои в фоновом режиме и устанавливает их.

Пока приложение работает, обои меняются. Когда я закрываю обои, это останавливается. Я использую PeriodcWork в Workmanager.

Это мой код

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 ответа

Решение

Вам лучше использовать Android-Job от Evernote.

Внутренне использует WorkManager, обеспечивает плавные, аккуратные методы и надежность, а также прост в реализации.

Автоматически выбирает между JobManager/WorkManager/GCM/AlarmManager, чтобы обеспечить выполнение вашего кода.

Я сам этим пользуюсь и это хорошо.

Я предлагаю вам использовать WallpaperManager и WallpaperService для управления пользовательскими обоями.

Другие вопросы по тегам