Как сделать локальное уведомление Android, которое не всплывает, просто отображается в списке уведомлений? - PullRequest
0 голосов
/ 21 января 2019

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

Ответы [ 2 ]

0 голосов
/ 21 января 2019

Вам нужно использовать низкий приоритет для канала, который вы создали

NotificationManager.IMPORTANCE_LOW  or NotificationManager.IMPORTANCE_MIN 

В Android Oreo для создания уведомлений необходимо использовать каналы уведомлений.

Например: при создании канала с идентификатором «Оповещения» вы можете определить его свойства, такие как важность , звук и т. д. *

Используются различные атрибуты важности: :

IMPORTANCE_DEFAULT: Важность уведомления по умолчанию: показывает везде, издает шум , но визуально не мешает. Постоянное значение: 3

IMPORTANCE_HIGH: Более высокая важность уведомления: показывает везде, шуметь и заглядывает . Может использовать полноэкранные намерения.

[Это будет отображаться поверх других приложений и снова как уведомления о сообщениях в WhatsApp] Это работает так из-за его важности. Постоянное значение: 4

IMPORTANCE_LOW Низкая важность уведомления: показывается везде, но не навязчиво. Постоянное значение: 2

IMPORTANCE_MIN Минимальное значение уведомления: отображается только в тени, ниже сгиба. Постоянное значение: 1

Таким образом, после того, как вы определите свойства канала, он может быть изменен только пользователем через намерение уведомления. Который я упомянул здесь: https://stackoverflow.com/a/54199316/7039593

Использование низкого приоритета / минимальной минимальной важности может решить вашу проблему

0 голосов
/ 21 января 2019

Это делается путем установки приоритета уведомления MINIMUM.Например:

NotificationCompat.Builder b = new NotificationCompat.Builder(context, "MyReminder");
b.setPriority(NotificationCompat.PRIORITY_MIN);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
    String id = MyApp.getNotificationChannel(context);
    b.setChannelId(id);
}

Примечание для Oreo и выше, вы также должны установить приоритет канала уведомлений:

final private static String MyChannelID = "MyChannel_1";
private static NotificationChannel channel;

static private String getNotificationChannel(Context context) {
    // Create the NotificationChannel, but only on API 26+ because
    // the NotificationChannel class is new and not in the support library
    if (channel == null) {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {

            CharSequence name = "My Reminders";
            String description = "My Reminders pre-scheduled using My app";
            int importance = NotificationManager.IMPORTANCE_MIN;
            channel = new NotificationChannel(MyChannelID, name, importance);
            channel.setDescription(description);
            channel.enableLights(true);
            // Sets the notification light color for notifications posted to this
            // channel, if the device supports this feature.
            channel.setLightColor(Color.RED);

            channel.enableVibration(true);

            // Register the channel with the system; you can't change the importance
            // or other notification behaviors after this
            getNotificationManager().createNotificationChannel(channel);
        }
    }
    return MyChannelID;
}


static public NotificationManager getNotificationManager() {
    Context context = App.getContext();
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
        return context.getSystemService(NotificationManager.class);
    }
    else {
        return (NotificationManager) context.getSystemService(context.NOTIFICATION_SERVICE);
    }
}

Я не проверял поведение каждого приоритета, ноMINIMUM и IMPORTANCE_MIN работают.Если у вас есть более конкретные поведения, которые вы хотите получить, вы можете посмотреть документацию и поиграть с другими уровнями приоритета.

...