it-roy-ru.com

Правильный способ создания каналов уведомлений из Android O Api

Каналы уведомлений, представленные в версии Android O (API 26). Я читал об этом по следующим ссылкам:

Вопросы: 

  1. Если у меня несколько номеров уведомлений, то стоит ли создавать каналы уведомлений при запуске приложения и сохранять их на ApplicationScope?

    public void addNotificationChannels(Context context) {
    
        List<NotificationChannel> channels = new ArrayList<>();
        channels.add("channel_1");
        channels.add("channel_2");
        .
        .
        channels.add("channel_7");
    
        NotificationManager notificationManager =
            (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
        notificationManager.createNotificationChannels(channels);
    
    }
    
  2. Что произойдет, если я попытаюсь выполнить эту строку new Notification.Builder(getApplicationContext(), PRIMARY_CHANNEL) перед добавлением каналов в диспетчер уведомлений

6
sam_k
  1. В идеале, вы должны создать канал при публикации уведомления на него . Безопасно вызывать createNotificationChannel с тем же идентификатором, использованным ранее , Он не будет воссоздан.
  2. Ваша заявка не будет публиковать это уведомление. Система может показывать предупреждение о том, что вашему приложению не разрешено публиковать это уведомление.
6
Arnav M.

Что я делаю, так это расширение класса приложения (не забудьте обновить манифест приложения именем класса) и создание каналов уведомлений один раз в методе onCreate. Это гарантирует, что каналы уведомления всегда создаются при создании уведомления.

ИМХО, это пустая трата циклов ЦП, чтобы (пытаться) создавать каналы уведомлений для каждого уведомления снова и снова.

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

4
M66B

Я думаю, что есть два разумных пути:
1. Создать все каналы в подклассе приложения,
2. Создайте все каналы в своей основной деятельности, которая начинается с приложения. 

0
Matt