2017-08-03 19 views
5

我目前正致力於將應用程序轉換爲Android O,並且目前正在處理通知渠道。是否可以通過IMPORTANCE_MIN在通知渠道中放置前臺服務通知?

我已經制作了不同的頻道,使用不同的importance levels,由於應用程序有一個前臺服務必須在任何時候都運行,直到我們轉換到一個新的體系結構(更多的面向推送),我考慮將該通知放入一個頻道中它的重要性設置爲IMPORTANCE_MIN,以便它在那裏,但它不會影響用戶,也不會在狀態欄中放置圖標。

然而,當我這樣做,我把我的應用程序在後臺(與家庭或後退按鈕),我得到一個Android系統的通知,告訴我,我的應用程序在後臺運行,就像這樣:

Android System notification for a service running in the background

如果我改變我的頻道,並使其使用IMPORTANCE_LOW,問題消失,但通知更加突出。

所以,我的問題是 - 是否有可能做我所嘗試的?我知道系統不會允許開發人員這樣做,因爲如果您有前臺服務,它應該對用戶可見,但這只是一個猜測,並且我沒有發現關於此的文檔,這就是爲什麼我是張貼這個問題。

我的第二個問題是 - 在O之前,如果您將通知的優先級設置爲PRIORITY_MIN,您是否可以將該通知綁定到某個服務以使其成爲前臺服務,還是因爲它始終處於禁止狀態?

編輯:證實,Android系統顯示與重要性IMPORTANCE_MIN(感謝,M66B)通道的通知,所以現在剩下的問題是爲什麼?有沒有人知道背後的原因,或者可以在任何地方找到任何文檔?這可能是一個應該向跟蹤器報告的錯誤?

+0

對於前臺服務通知,使用通知優先級PRIORITY_MIN可以在Android O之前正常工作,也可以在我的經驗中使用Android O。 – M66B

+2

你的意思是,在Android O上,如果你還沒有瞄準API 26級?因爲優先級從API級別26開始已被棄用,並且您需要使用重要性製作通知渠道,以便訂購通知。 – Anax

+0

通知的優先級在API級別26上已棄用,但新增功能是通知通道的「重要性」,因此您仍然可以實現相同的目的。看到這裏:https://developer.android.com/reference/android/app/NotificationChannel.html#setImportance (int) – M66B

回答

2

這種行爲現在已經證明:https://developer.android.com/reference/android/app/NotificationManager.html#IMPORTANCE_MIN

閔通知重要性:只顯示在陰涼處,折以下。 這不應該與Service.startForeground一起使用,因爲 前景服務應該是用戶關心的事情,所以 它不具有語義意義以將其通知標記爲最小 重要性。如果您從Android版本O開始執行此操作,系統將會在 背景中顯示關於您的應用程序的更高優先級的通知,該通知將顯示爲 。

和這裏:https://material.io/guidelines/patterns/notifications.html#notifications-settings

在Android中O,通道對前景 服務通知默認的重要性等級必須至少IMPORTANCE_LOW使其顯示 在狀態欄中的圖標。

使用不太顯眼的IMPORTANCE_MIN級別的頻道會在IMPORTANCE_LOW觸發Android的額外通知 ,指出 應用程序正在使用電池。

旁註: 這是我們一個真正的痛苦,因爲之前我們使用的時候我們的前景通知沒有有趣的信息呈現PRIORITY_DEFAULT和PRIORITY_MIN之間進行動態切換O操作。有了渠道,我們不能再動態地改變重要性,並且必須刪除該功能。

+1

非常感謝!我們有一個非常相似的功能,也必須將其刪除。 – Anax

+1

我想答案是使用單獨的渠道獲取更高優先級的信息,並指導用戶如何手動降低主要通知的可見性。 –