Можно ли отображать индикатор выполнения в области уведомлений при использовании WorkManager - как синхронизация данных WhatsApp - PullRequest
0 голосов
/ 09 февраля 2019

В настоящее время, если наше устройство подключено к WiFi, WhatsApp выполнит синхронизацию с облаком, показывая индикатор выполнения в области уведомлений.

enter image description here

Iбыло интересно, как я могу добиться этого, используя WorkManager?В настоящее время я знаю, что могу установить конкретное ограничение для WorkManager для запуска фонового задания.

  1. Время задержки
  2. Сетевое ограничение

Но,как мы можем показать интерфейс уведомления через WorkManager?

1 Ответ

0 голосов
/ 11 февраля 2019

Вот кое-что, что у меня на уме, может помочь.Идея состоит в том, чтобы создать работника и применить свою логику для получения прогресса и отображения обновлений в виде уведомлений с использованием обработчика.

ПРИМЕЧАНИЕ: Этот код не проверен, и я использую его только для объяснения способа

Рабочий код

public class CompressWorker extends Worker {

public CompressWorker(@NonNull Context context, @NonNull WorkerParameters params) {
    super(context, params);
}

@NonNull
@Override
public Result doWork() {
   ProgressManager manager = new ProgressManager();
   int i = 0;
   while(i<100){
       i++;
       try {
           Thread.sleep(1000);
           manager.updateProgress(i);
       } catch (InterruptedException e) {
           e.printStackTrace();
       }
   }
    Log.i("Ansh", "worker's job is finished");
    // Indicate success or failure with your return value:
    return Result.success();

    // (Returning Result.retry() tells WorkManager to try this task again
    // later; Result.failure() says not to try again.)
}}

И есть еще одинкласс, использующий обработчик для отправки обновлений в уведомление

public class ProgressManager {

Context context;
NotificationManagerCompat notificationManagerCompat = NotificationManagerCompat.from(context);

Handler handler = new Handler(Looper.getMainLooper()) {
    @Override
    public void handleMessage(Message msg) {
        super.handleMessage(msg);

        NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(
                context);
        notificationBuilder.setProgress(100, msg.arg1, true);
        Notification notification = notificationBuilder.build();
        notificationManagerCompat.notify(1000, notification);
    }
};


public void updateProgress(int val) {
    Message msg = new Message();
    msg.arg1 = val;
    handler.sendMessageDelayed(msg, 1000);
}}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...