Android O Notification Channel 的坑

Android O 不让后台起service, 要么改成JobSchedule,要么改成foreground service。

JobSchedule代码改动太大,图方便选了foreground service。

Foreground service就是service起来的同时要有一个notification让用户看到,就是原先偷偷摸摸的后台动作现在都得光明正大放到台前来。想了想觉得可以在notification channel上动下脑筋。

notification channel是android o新加的,凡是target o 的应用在o上弹notification都得创建一个notification channel,创建以后在系统设置里有一个统一的地方管理各个应用的通知,包括声音,优先级,震动等等,它有几个坑。

第一个坑,notification channel 创建后不能修改,上一篇文章已经讲过了就不讲了。

第二个坑,notification channel 的名字和描述是创建时自己设的,虽然你代码里多语言都考虑进去了,但是等你切换语言就会发现,它根本不管,创建时是啥语言还是啥语言,必须应用自己监听ACTION_LOCALE_CHANGED广播,然后重新设置一下名字和描述,真是 坑爹的设计。

第三个坑,前面说了想要起个foreground service 但是又不想让弹notification太显眼,于是想到把notification channel的优先级设成最低,这样弹出的notification不仅没有声音,而且也不会在状态栏显示出来,只有下拉通知栏才能看到,而且还是排在最底下,这样的通知基本能满足偷偷摸摸起service的需求。然而图样图森破,不管你之前设置的优先级是min 还是 low,只要你用这个channel起了一次service,系统会自动把这个channel的优先级调整为medium!文档描述里说好的创建后不再修改去哪里了啊!!!!

你可能感兴趣的:(Android O Notification Channel 的坑)