Как сделать так, чтобы уведомления выглядывали (не хедз-ап) - PullRequest
0 голосов
/ 14 февраля 2019

У меня есть уведомление, которое появляется во время задачи ввода-вывода, которую я хотел бы посмотреть, чтобы пользователь знал, что детали находятся в другом месте (строка состояния).На старых устройствах мой код работает, но на более новых устройствах уведомление не сбрасывается в строку состояния, оно становится постоянным заголовком.Я ожидаю, что на более новых устройствах обновление уведомлений (текущий файл) приводит к сбросу пика.Кто-нибудь знает способ гарантировать, что уведомление - это просмотр, а не хедз-ап?

Мое приложение полноэкранное, поэтому default приоритетный просмотр .

    Util.createNotificationChannel(
        applicationContext,
        "copy",
        "Copying...",
        "Notifications for copy tasks.")

    val builder = Util.createNotification(
        applicationContext,
        "copy",
        applicationContext.getString(R.string.copyingImages),
        applicationContext.getString(R.string.preparing))

    val notifications = NotificationManagerCompat.from(applicationContext)
    notifications.notify(builder.build())

    ...
    (loop)

    builder
        .setProgress(images.size, index, false)
        .setContentText(value.name)
        .priority = NotificationCompat.PRIORITY_DEFAULT
    notifications.notify(builder.build())

Ответы [ 2 ]

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

@ paulajcm было ядром:

Я полагаю, что Notification.Builder.setOnlyAlertOnce () будет иметь ожидаемый результат.

Другим аспектом, который следует учитывать, является то, что идентификатор уведомления должен быть уникальным, иначе вы никогда не будете искать этот тип уведомления снова, поскольку вы фактически установили этот идентификатор, чтобы он не возвращался снова.

builder.notify(JOB_TAG, id, notification) // id must be 'unique'

Другой вещью, которую я сделал, было переключение setOnlyAlertOnce(false) для последнего сообщения, так что есть уведомление, что операция также завершена:

        builder
            .setContentText("Complete")
            .setProgress(0,0,false)
            .setOnlyAlertOnce(false)
        notifications.notify(builder.build(), notificationId)

Так что теперь это понятно пользователюкогда длительное фоновое задание запускается и завершается, без ошибок между ними.

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

Я полагаю, что Notification.Builder.setOnlyAlertOnce() будет иметь ожидаемый результат.

...