2017-08-28 97 views
11

今天我開始定位API 26,這迫使我使用Notification Channels。禁用來自NotificationChannel的聲音

我的問題是,現在在每個新的通知(更新)一個惱人的聲音播放。

如何禁用此聲音?

我試着用一個自定義的mp3聲音替換這個聲音,然後傳給它一個帶有沉默的mp3(耶穌基督,Google!),但是這被忽略了。

我只是添加了一個非常低優先級的通知,基本上讓用戶在與應用進行交互後執行某些操作。沒有理由要大聲,用戶會知道他可以參考通知,因爲他已經對應用程序做了某些事情,他知道這會導致通知出現。

用戶真的會開始被這種聲音困擾。

回答

10

解決方案是使用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,像它會在用戶明確地改變設置從默認高。在關閉通知然後重新打開通知後,該設備也會重置爲默認設置。

+1

這個答案中非常重要的一部分:「一旦創建了一個頻道,就不能改變其重要性(可以,但可以忽略新的重要性)」。我掙扎了很長時間,因爲我沒有明白爲什麼我對NotificationChannel所做的任何更改沒有反映在應用程序的行爲中。每次我對它進行更改以查看更改時,我都必須重命名該頻道。 –

11

如果你想保持你的頻道的重要性,只是刪除聲音notificationChannel.setSound(null, null);似乎做的工作。

如Daniel F所述,請確保卸載並重新安裝應用程序以應用新配置。

+2

卸載/重新安裝,或者只需重命名NotificationChannel。 –

+0

一個頻道可以通過API刪除,你不需要卸載你的應用程序 – SolidSnake

+0

我認爲更好的解決方案是使用'NotificationManager.IMPORTANCE_DEFAULT'。這會禁用聲音並且是重要的不錯選擇。 請注意,如果您使用'NotificationManager.IMPORTANCE_HIGH'並且您多次顯示相同的通知,它將不斷彈出。如果顯示相同的通知,使用'IMPORTANCE_DEFAULT'還可以防止此通知再次彈出。 – Markymark