通知栏提示应用正在运行通知----如何屏蔽此通知

通知栏提示应用正在运行通知----如何屏蔽此通知

1.问题:打开应用,通知栏提示“xx应用”正在运行,且应用只要在运行,此通知一直显示,不会消失,手动也不能删除,除非杀死应用,如新浪财经的提示:

2.此通知弹出逻辑

关于前台服务:

在系统内存资源不足的情况下,会优先杀掉低优先级的进程。对于只有service的进程,有些情况对于用户来说是可感知的app。往往不希望被系统所杀,比如正在听音乐。

系统默认service都是后台的,可以通过startForeground()把该service提升到foreground优先级,那么adj便会成为PERCEPTIBLE_APP_ADJ(可感知的级别),这个级别的app一般不会轻易被杀。当用户不再听歌时,应该主动调用stopForeground(),将其优先级还原到后台,为用户提供更好的体验,相关API位于文件Service.java :

startForeground(int id, Notification notification)

stopForeground(boolean removeNotification)

以上两个方法进入AMS都是调用setServiceForeground();对于startForeground(),往往通过postNotification()来展示 一个通知;对于stopForeground(),当removeNotification=true,则通过 cancelNotification()来取消通知。

作为前台service,必须要有一个status bar的通知,并且通知不会消失直到service停止或许主动移除前台优先级。

3.如果不想要这种通知显示出来,要怎么做?

目前我们的做法是在ServiceRecord.java的postNotification()方法中,根据notification的channelId进队列前进行拦截:

目前没有找到比较合适的过滤方式,如过滤出音乐类应用的channelId不进行拦截从而正常显示,但是可以拦截掉市面上的大多数应用,如新浪财经等。

相关推荐

四川玉石产地全解析:揭秘四川优质玉石的出产地与种类
四仰八叉
beat365app登录入口

四仰八叉

📅 07-04 👁️ 329
6款庭院花境中常用的灌木球品种
国内在365投注

6款庭院花境中常用的灌木球品种

📅 07-14 👁️ 332