从Android O Api创建通知通道的正确方法

时间:2017-09-19 07:48:49

标签: android android-notifications android-8.0-oreo notification-channel

从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)会发生什么

4 个答案:

答案 0 :(得分:7)

  1. 理想情况下,您应该在向其发布通知时创建频道。 使用相同的ID调用createNotificationChannel是安全的 以前,它不会被重新创建。
  2. 您的申请不会发布此通知。系统可能会显示警告,以致您的应用不允许发布此通知。

答案 1 :(得分:6)

我做的是延长the application class(不要忘记用类名更新应用程序的清单)并在 onCreate 方法。这可确保在构建通知时始终创建通知通道。

恕我直言,为了(试图)一遍又一遍地为每个通知创建通知渠道,浪费了CPU周期。

作为旁注:我总是以这种方式记录应用版本,这在有人发送logcat时非常有用。

答案 2 :(得分:0)

我认为有两种合理的方式:
1.在Application子类中创建所有通道,
2.在主Activity中创建所有频道,首先从应用开始。

答案 3 :(得分:0)

A)如文档所述:

  

使用其原始值创建一个现有的通知渠道   不执行任何操作,因此在启动   应用程序。

因此,您可以在创建通知本身的同时安全地创建通知通道,而无需检查该通道是否已创建。

B)内部应用程序或任何活动/片段。

注意:如果您使用的是原始FCM,则在SDK为您发布通知之前先创建频道很有趣,因为根据推送有效负载参数android_channel_id,您可以将该推送关联到已创建的特定频道在您的应用中。

Fcm有效载荷:https://firebase.google.com/docs/cloud-messaging/http-server-ref