ListenableWorker не удаляет значок уведомления - PullRequest
1 голос
/ 05 марта 2020

Я использую ListenableWorker для выполнения фоновых задач. Кроме того, я хочу, чтобы ОС знала о важности моей службы, поэтому я звоню

 setForegroundAsync(new ForegroundInfo(WorkerConstants.NOTIFICATION_FOREGROUND_ID,
 builder.build()));

, как указано в документации Google.

Но когда моя служба остановлена ​​или отменена, я все равно могу видеть передний план сервисное уведомление, и я не могу удалить его.

Кроме того, я добавил кнопку отмены в это уведомление, но оно ничего не делает, я не могу закрыть его:

PendingIntent intent = WorkManager.getInstance(getApplicationContext())
                            .createCancelPendingIntent(getId());
                    builder.addAction(R.drawable.ic_redesign_exit,"Stop",intent);

Есть предложения?

1 Ответ

0 голосов
/ 14 апреля 2020

Лучше забудьте о setForegroundAsync и go для традиционного способа, как описано здесь: https://developer.android.com/training/notify-user/build-notification

Вот что я использовал:

    Context context = getApplicationContext();
    String title = context.getString(R.string.str_synchronisation);
    String cancel = context.getString(R.string.str_cancel_synchronisation);
    // This PendingIntent can be used to cancel the worker
    PendingIntent intent = WorkManager.getInstance(context)
            .createCancelPendingIntent(getId());
    //notificationManager.cancel(notification_ID);

    NotificationCompat.Builder builder = new NotificationCompat.Builder(context, notif_ch_id)
            .setSmallIcon(R.drawable.ic_sync_black_24dp)
            .setContentTitle(title)
            .setContentText("Use this Content")
            .setOngoing(true)
            .setPriority(NotificationCompat.PRIORITY_DEFAULT)
//                // Add the cancel action to the notification which can
//                // be used to cancel the worker
            .addAction(android.R.drawable.ic_delete, cancel, intent);
    notificationManager.notify(notification_ID, builder.build());

не забудьте сохранить экземпляр диспетчера уведомлений:

notificationManager = (NotificationManager) context.getSystemService(NOTIFICATION_SERVICE);

Обновите уведомление с помощью:

builder.setContentText(context.getString(R.string.str_veuiller_patienter)
                + ", fichier " + String.valueOf(i + 1) + totalfiles);
notificationManager.notify(notification_ID, builder.build());

Отмените уведомление с помощью:

notificationManager.cancel(notification_ID);
...