解決方案是使用NotificationManager.IMPORTANCE_LOW
併爲其創建新通道。一旦創建了一個頻道,您就不能改變其重要性(可以,但可以忽略新的重要性)。頻道信息似乎被系統永久存儲,並且只有在您卸載應用程序時纔會刪除創建的任何頻道。
雖然之前的Android版本默認沒有迴音,但是這只是改變了Android O,但只有當您定位API 26時,即使用通知通道。這是不一致的。
一切下一行下面是過時,但這個bug提到有仍然有效。我的錯誤是認爲NotificationManager.IMPORTANCE_MIN
是從NotificationManager.IMPORTANCE_DEFAULT
下一個較低的,但NotificationManager.IMPORTANCE_LOW
是。
當你創建一個NotificationManager.IMPORTANCE_DEFAULT
通道(默認情況下不soundworthy)它實際上將其註冊爲NotificationManager.IMPORTANCE_HIGH
(默認播放聲音)。這是一個錯誤。
然後,當您通過長按通知和全通道按鈕進入應用程序的通知設置並關閉並重新打開該通道的開關時,它實際上將其自身設置爲NotificationManager.IMPORTANCE_DEFAULT
,並且沒有聲音會獲得播放。我也注意到,崩潰後它確實得到重置爲NotificationManager.IMPORTANCE_HIGH
所以基本上,解決方法是使用NotificationManager.IMPORTANCE_MIN
。但是你必須創建一個新的頻道,以便NotificationManager.IMPORTANCE_MIN
生效,因爲看起來一旦你創建了頻道,就不能改變已有頻道的重要性。
The bug has been submitted to the Android issue tracker, so you may want to star it。
更新:原來,與NotificationManager.IMPORTANCE_MIN
的解決方法有一個缺點。
當您使用該重要性級別時,您的通知不再在通知抽屜中完全顯示,而是將其本身插入到默認摺疊的新通知通道組中(並且每次抽屜被拉下時會再次摺疊) 。真是無賴!
更新2:挖一個深一點事實證明,這是因爲如果它正確地把它註冊爲NotificationManager.IMPORTANCE_DEFAULT
,但不知何故,奇蹟般地得到了升級爲NotificationManager.IMPORTANCE_HIGH
,像它會在用戶明確地改變設置從默認高。在關閉通知然後重新打開通知後,該設備也會重置爲默認設置。
這個答案中非常重要的一部分:「一旦創建了一個頻道,就不能改變其重要性(可以,但可以忽略新的重要性)」。我掙扎了很長時間,因爲我沒有明白爲什麼我對NotificationChannel所做的任何更改沒有反映在應用程序的行爲中。每次我對它進行更改以查看更改時,我都必須重命名該頻道。 –