正确的更新通知渠道名称的方法是什么?

14

我想根据语言环境更新通知渠道名称。为了实现这一点,我正在使用BroadcastReceiver并侦听ACTION_LOCALE_CHANGED广播。

我的问题是,更新名称的正确方式是什么?

我应该像这样做吗?

notificationManager.getNotificationChannel(CHANNEL_ID).setName(“newName”);

还是我应该像这样重新创建频道吗?

NotificationChannel notificationChannel = new NotificationChannel(CHANNEL_ID, “newName”, NotificationManager.IMPORTANCE_DEFAULT);
notificationManager.createNotificationChannel(notificationChannel);

通过这样做(第二种方法),我是否会覆盖除了通道名称以外的其他内容?


2
我认同这一通知概念需要一些权威的最佳实践文档来支持。目前的android.com并不能满足这个需求。我看到足够多的文档似乎是直接从其他类别中复制过来的,没有任何修改。例如:https://developer.android.com/reference/android/app/NotificationChannel.html#enableVibration(boolean) - Martin Westin
我真的很好奇getNotificationChannel(CHANNEL_ID)。它需要被包装在try catch中。但是一旦你有了这个对象,你几乎可以调用所有方法,导致静默的“no-ops”。拥有访问对象的实用性非常有限。创建和删除函数似乎确实意味着它们是唯二鼓励的操作。“只需再次创建,我会做魔法。”和“删除后,我仍将保留(禁用)通道,以防您想再次创建它”看起来通道应该在清单中指定,对吧? - Martin Westin
1个回答

23

你应该像第一次创建频道那样重新创建频道。如果该频道尚未创建,createNotificationChannel 命令将会创建频道,并且如果该频道已经被创建,它将会更新该频道。

如果频道已经被创建,那么你唯一可以更改的是频道的名称和频道的描述,其他任何内容都不能更改。重要性将被忽略,因为用户可能已经手动更改了频道的重要性。但即使他们没有更改过,重要性也不会被更新,实际上这就是通知渠道的目的。给用户自由地管理他们的频道,而不是在应用程序更新时让开发者乱搞。

所以总之,通过声明:

NotificationChannel notificationChannel = new NotificationChannel(CHANNEL_ID, “newName”, NotificationManager.IMPORTANCE_DEFAULT);
notificationManager.createNotificationChannel(notificationChannel);

在已创建的频道中,频道的名称将被更新,但重要性不会更改。如果您还想更新频道描述,可以这样做:

notificationChannel.setDescription("new description"); //set that before creating the channel

7
降低频道的重要性也可以起作用,但前提是用户之前没有手动更改过频道的重要性。 - Marat

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接