Android O 不讓后臺起service, 要么改成JobSchedule,要么改成foreground service。
JobSchedule代碼改動太大,圖方便選了foreground service。
Foreground service就是service起來的同時要有一個notification讓用戶看到,就是原先偷偷摸摸的后臺動作現(xiàn)在都得光明正大放到臺前來。想了想覺得可以在notification channel上動下腦筋。
notification channel是android o新加的,凡是target o 的應用在o上彈notification都得創(chuàng)建一個notification channel,創(chuàng)建以后在系統(tǒng)設置里有一個統(tǒng)一的地方管理各個應用的通知,包括聲音,優(yōu)先級,震動等等,它有幾個坑。
第一個坑,notification channel 創(chuàng)建后不能修改,上一篇文章已經(jīng)講過了就不講了。
第二個坑,notification channel 的名字和描述是創(chuàng)建時自己設的,雖然你代碼里多語言都考慮進去了,但是等你切換語言就會發(fā)現(xiàn),它根本不管,創(chuàng)建時是啥語言還是啥語言,必須應用自己監(jiān)聽ACTION_LOCALE_CHANGED廣播,然后重新設置一下名字和描述,真是 坑爹的設計。
第三個坑,前面說了想要起個foreground service 但是又不想讓彈notification太顯眼,于是想到把notification channel的優(yōu)先級設成最低,這樣彈出的notification不僅沒有聲音,而且也不會在狀態(tài)欄顯示出來,只有下拉通知欄才能看到,而且還是排在最底下,這樣的通知基本能滿足偷偷摸摸起service的需求。然而圖樣圖森破,不管你之前設置的優(yōu)先級是min 還是 low,只要你用這個channel起了一次service,系統(tǒng)會自動把這個channel的優(yōu)先級調(diào)整為medium!文檔描述里說好的創(chuàng)建后不再修改去哪里了?。。。?!