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

问题描述 投票:8回答:4

从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)会发生什么
android android-notifications android-8.0-oreo notification-channel
4个回答
7
投票
  1. 理想情况下,您应该在向其发布通知时创建频道。使用之前使用的相同ID调用createNotificationChannel是安全的,它不会被重新创建。
  2. 您的申请不会发布此通知。系统可能会显示警告,即您的应用不允许发布此通知。

7
投票

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

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

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


0
投票

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


0
投票

A)正如文件所说:

使用原始值创建现有通知通道不会执行任何操作,因此在启动应用程序时调用此代码是安全的。

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

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.