ListenableWorker сделано, но текущее уведомление переднего плана все еще существует? - PullRequest
0 голосов
/ 03 марта 2020

Я пытаюсь использовать ListenableWorker для выполнения некоторых фоновых вызовов API.

Во время этого процесса я хочу отображать уведомление с прогрессом.

Я использую setForegroundAsyn c ( ) функция согласно этой документации google docs

Проблема в том, что когда мой ListenableWorker останавливается, я все еще вижу свое ongong уведомление и не могу его удалить.

Это мой refre sh функция, в которой я меняю параметры уведомления:

private void updateRefreshStatus(float objectsProcessed, int totalObjects) {
        if (totalObjects == 0) {
            setProgressAsync(new Data.Builder().putFloat(PROGRESS_CONSTANT_ID, 100.0f).build());
            setForegroundAsync(createForegroundInfo(FloatFormatter.roundFloatTwoDigitsAsString(100f)));
        } else {
            setProgressAsync(new Data.Builder().putFloat(PROGRESS_CONSTANT_ID, (objectsProcessed / (float) totalObjects) * 100f).build());
            setForegroundAsync(createForegroundInfo(FloatFormatter.roundFloatTwoDigitsAsString((objectsProcessed / (float) totalObjects) * 100f)));
        }       
    }

Вот как я создаю свой foregroundInfo:

private ForegroundInfo createForegroundInfo(@NonNull String progress) {
        Notification notification = WorkerUtils.prepareProgressNotification("Update",
                "Update progress " + progress + " %",
                getApplicationContext());
        return new ForegroundInfo(NOTIFICATION_PROGRESS_ID,notification);
    }

Это мой прогресс код уведомления:

static Notification prepareProgressNotification(String title, String message, Context context) {
        // Make a channel if necessary
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
            // Create the NotificationChannel, but only on API 26+ because
            // the NotificationChannel class is new and not in the support library
            CharSequence name = WorkerConstants.VERBOSE_NOTIFICATION_CHANNEL_NAME;
            String description = WorkerConstants.VERBOSE_NOTIFICATION_CHANNEL_DESCRIPTION;
            int importance = NotificationManager.IMPORTANCE_HIGH;
            NotificationChannel channel =
                    new NotificationChannel(WorkerConstants.CHANNEL_ID, name, importance);
            channel.setDescription(description);

            // Add the channel
            NotificationManager notificationManager =
                    (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);

            if (notificationManager != null) {
                notificationManager.createNotificationChannel(channel);
            }
        }

        // Create the notification
        NotificationCompat.Builder builder = new NotificationCompat.Builder(context, WorkerConstants.CHANNEL_ID)
                .setContentTitle(title)
                .setSmallIcon(R.drawable.ic_launcher)
                .setContentText(message)
                .setTicker(title)
                .setOngoing(true)
                .setAutoCancel(true)
                .setPriority(NotificationCompat.PRIORITY_HIGH)
                .setVibrate(new long[0]);

        // Show the notification
        return builder.build();
    }

Я пытался вызвать cancelAll, cancel (id), но в моем случае ничего не происходит.

ОБНОВЛЕНИЕ: Удаление .setOngoing (true) от строителя, ничего не делает для меня это похоже на setForegroundAsyn c () проблема?

...