如何正确更新 Android Oreo 的通知渠道

4
我试图在创建通知渠道后更新它。具体来说,我想正确设置通知声音,但是在创建之后。我无法找到正确的方法来做到这一点。
我尝试的方法是删除该渠道并重新创建它,但似乎不起作用...
if (notificationManager != null) {
            notificationManager.deleteNotificationChannel(NOTIFICATION_CHANNEL_ID);
            notificationManager.createNotificationChannel(channel);
            System.out.println("Created notification channel" + channel.getSound() + " " + channel.getImportance());
        }

为什么你想要更新声音时还要尝试更新通知渠道?你能解释一下吗? - Prashanth Verma
所以我创建了通知渠道,但那时我不需要设置声音,因为我需要一些信息,只有在稍后才能获得。当我获取有关需要设置哪种声音的信息时,我需要在通知渠道上进行设置。 - Adrian Olar
为什么不在NotificationCompat.Builder中更改声音,而不是删除NotificationChannel呢? - Kunu
我的目标是更新该频道...删除和重新创建只是一个想法。 - Adrian Olar
你的问题是设置声音吗?所以不需要更新通道,只需在构建通知时不要在通道中提供setSound属性,而是在那时提供它。 - Prashanth Verma
我不想为每个通知都添加它,我想利用通知渠道。 - Adrian Olar
2个回答

9
在其他答案中已经说明了,只有在创建通道后才能更改通道的名称和描述,这是正确的。但是,正如代码中所指出的,您可以删除该通道,然后重新创建它。但是,如果您再次创建相同的通道但更改了某些内容(例如声音),它将不起作用。我假设Android会以与您尝试创建已存在的通道相同的方式阻止更改。因此,Android必须有一种跟踪所有已删除通道的方法(换句话说,它们并没有完全删除)。
如果您查看WhatsApp,它允许您从应用程序内更改声音,并且如果您进行一些调查,您会发现它们确实正在删除和创建通道。
那么你能做什么呢?您可以更改新通知通道的ID。或者增加一些足够大的随机元素,以防止您两次拥有相同的ID。或者增加一个计数器,并在您的应用程序中存储该信息(prefs或db或其他)。如果“重新创建”的通道具有新的ID,则Android将接受您的“更改”。由于您没有更改现有通道,而是创建了一个全新的通道。如果您保留其他用户可见的信息不变(例如名称、描述等),那么用户将不会注意到这一点,而只会体验到该类型通知(通道)的声音从应用内部更改了。
有什么缺点吗?嗯,一个非常小的缺点是Android将在应用程序通知设置中显示该通道已被删除多少次(以警告用户“垃圾邮件”)。我认为很少有用户会关心这个。您还会偏离Android想要的设计(完全用户控制通道),这可能不是理想的。
所以根据您的用例描述,我认为这样做是公平的,可以实现您想要的目标 :)

6

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