如何正确更新通知频道android oreo

如何正确更新通知频道android oreo,android,notifications,notification-channel,Android,Notifications,Notification Channel,我正在尝试在创建通知通道后更新它。也就是说,我想正确设置通知声音,但在我创建它之后。我真的不知道该怎么做 我试图删除频道并重新创建它,但它似乎不起作用 if (notificationManager != null) { notificationManager.deleteNotificationChannel(NOTIFICATION_CHANNEL_ID); notificationManager.createNotificationChann

我正在尝试在创建通知通道后更新它。也就是说,我想正确设置通知声音,但在我创建它之后。我真的不知道该怎么做

我试图删除频道并重新创建它,但它似乎不起作用

if (notificationManager != null) {
            notificationManager.deleteNotificationChannel(NOTIFICATION_CHANNEL_ID);
            notificationManager.createNotificationChannel(channel);
            System.out.println("Created notification channel" + channel.getSound() + " " + channel.getImportance());
        }

一旦创建了通知通道,用户就可以最终控制其设置。作为开发人员,您只能更改频道的标题和描述。如果要重新创建频道,必须使用不同的id


请参阅:

正如另一个答案中所述,您只能在创建频道后更改频道的名称和描述,这是正确的。但是,正如您在代码中指出的,您可以删除该频道,然后再次创建它。但是,如果你再次创建同一个频道,但改变了一些东西,例如声音,它将不起作用。我假设Android正在阻止这种改变,就像你试图在它已经存在的时候创建它一样。所以Android必须有一种方法来跟踪所有被删除的频道(换句话说,它们并没有被完全删除)

如果你看一下WhatsApp,他们允许你在应用程序中更改声音,如果你稍微调查一下,你会发现他们确实在删除和创建频道

那你能做什么呢?您可以做的是更改新通知通道的ID。也许添加一个足够大的随机元素可以防止您两次拥有相同的ID。或者增加一些内容并将这些信息存储在应用程序中(prefs或db或其他内容)。如果“重新创建”频道有新ID,Android将接受您的“更改”。因为你没有改变现有的频道,你正在创建一个全新的频道。如果你保持其余用户可见信息(如姓名、描述等)不变,那么用户不会注意到这一点,而只会体验到该类型通知(频道)的声音在应用程序中被更改

有什么缺点吗?好吧,一个超小型的是Android将在应用程序通知设置中显示频道被删除的次数(以提醒用户“垃圾邮件”)。我认为很多用户并不关心这一点。而且你也偏离了Android想要的设计(频道的完全用户控制),这可能是不可取的


因此,从您如何描述您的用例来看,我认为这样做是公平的,以实现您想要的:)

如果您想要更新声音,为什么要尝试更新通知频道?。你能澄清一下吗?所以我创建了通知频道,但当时我不需要设置声音,因为我需要一些信息,我只能在以后得到。当我得到需要设置的声音信息时,我需要在通知频道上设置。为什么不在NotificationCompat.Builder中更改声音,而不是删除NotificationChannel。我的目标是更新频道。。。删除和重新创建只是一个想法你的问题是设置正确的声音?。所以不需要更新频道,只是不要在频道中给出setSound的属性,而是在构建noitification时给出它