一种实现Android消息管控的方法与流程

文档序号:20163263发布日期:2020-03-24 21:13阅读:288来源:国知局
一种实现Android消息管控的方法与流程

本发明涉及android消息管控技术领域,特别涉及一种实现android消息管控的方法。



背景技术:

android消息管控是对notification(通知)进行管控。notification是一种具有全局效果的通知。它展示在屏幕的顶端,android原生消息通知对系统收到的notification首先会表现为一个图标的形式,当用户下拉通知栏可查看通知详细信息。状态栏和抽屉式通知栏都是系统控制,用户可随时查看。

目前,android消息管控仅表现在消息应用发送通知,系统收到通知后,将通知显示在通知栏上,由系统对通知进行管控。本发明的android消息管控方法则是通过自定义的消息中心使用notificationlistenerservice监听截获应用发送的通知,屏蔽android原生消息,自动注册通知监听服务,筛选消息应用并可对消息通知进行二次封装,实现对消息通知的管控。notificationlistenerservice是androidapi18引入的一个类,通知监听服务,用于监听系统收到的通知,处理通知的接收和移除。如果注册了这个服务,当任何一条通知到来或者被移除掉,都能用notificationlistenerservice监听到,还可做一些通知处理工作。

目前android系统管控消息通知的流程具体如下:

用户打开消息应用,在通知权限界面开启需要通知监听服务的消息应用,在设置中开启或关闭可发送通知的消息应用的通知按钮。当消息应用发送通知,系统收到通知,将通知的图标显示在状态栏,当用户下拉通知栏时,将通知信息显示在通知栏。

在上述流程中,有四个待解决的问题,分别是:

第一,需要实现对消息通知进行管控,需要屏蔽android原生消息显示,通过自定义的消息中心截获消息通知,以自定义ui对通知内容进行展示。

第二,在普通android应用中,使用通知监听服务需要手动开启通知权限,系统注册服务,而我们实现的是系统级应用,希望实现自动注册通知监听服务,无需用户手动操作。

第三,系统对消息通知进行管控,是通过用户手动设置开启或关闭系统接收消息应用发送通知的功能。我们希望不通过用户手动操作,实现消息通知的管控,就需要筛选消息应用。系统在下拉通知栏展示的通知内容就是消息应用发送的通知,而我们希望对消息应用发送的通知进行二次封装,比如更改通知的图标、标题等,通过消息中心展示封装后的通知。

第四,我们自动注册通知监听服务组件后,服务组件不会被启动,在组件中引用context为空。



技术实现要素:

本发明的目的是克服上述背景技术中不足,提供一种实现android消息管控的方法,可实现截获android消息通知并屏蔽android原生消息,使用自定义消息中心展示通知,并且自动注册notificationlistenerservice组件到系统底层,监听通知,并在收到通知后,筛选消息应用,对通知内容进行二次封装,最后,解决注册服务为启动引发context为空的问题。

为了达到上述的技术效果,本发明采取以下技术方案:

一种实现android消息管控的方法,其特征在于,包括以下步骤:

a.通过继承notificationlistenerservice,重写接收和移除通知的方法,并移除android原生消息显示的应用,实现截获消息通知并且屏蔽android原生消息;

系统通过notificationlistenerservice监听消息通知,而要实现截获消息通知,也需要使用notificationlistenerservice,需要使用截获的通知,就要重写接收和移除通知的方法,并且移除android原生消息显示应用,实现截获消息通知,屏蔽android原生消息,由此则不需要系统显示通知,可实现使用自定义的消息中心通过自定义ui展示截获的消息通知;

b.通过反射机制调用类中的隐藏方法registerassystemservice()注册服务,实现组件自动组册;

用户在通知权限界面手动开启需要该服务的应用,开启后系统会注册通知监听服务并开启;由于notificationlistenerservice是一个系统级别的服务,会自动监听消息通知,但是前提是客户拥有获取通知权限;为拥有获取通知权限,需将通知监听服务自动注册到系统服务中,通过反射机制调用隐藏函数registerassystemservice()方法,实现组件自动注册,由此,则不需要用户参与,即可实现组件的自动注册;

c.通过对发送通知的消息应用进行包名限制,筛选消息应用并通过截获通知对内容进行二次封装,实现对消息通知的管控;

系统收到的通知,是用户在设置中开启了应用通知按钮的应用发送的通知;系统筛选消息应用,是通过用户设置完成;注册了通知监听服务后,截获通知,也需要筛选消息应用,本方案则是通过进行包名限制,只处理筛选后的消息应用发送的通知,而且可对通知进行二次封装,更改通知的内容等,由此,则不需要用户参与,即可实现筛选消息应用,且可对消息二次封装

d.通过自行启动一个后台服务为通知监听服务提供服务,解决引用context为空的问题;

在普通android应用中,用户手动开启获取通知权限后,系统会注册并开启通知监听服务,在注册的通知监听服务中获取的context不会为空,而本方案中注册了通知监听服务后,并未开启该服务,只是使用了该服务的监听和重写的方法,该服务并未被启动,未被启动的服务无法获取context,为获取context,需要自行启动一个后台常驻服务,为监听服务提供服务,传递context给监听服务,由此,即可获取正常的context,正常使用监听服务。

进一步地,所述步骤a具体包括:

a1.继承notificationlistenerservice,重写onnotificationposted()方法和onnotificationremoved()方法;

a2.当收到一条消息时,回调onnotificationposted(statusbarnotificationsbn)方法,其中,sbn中带有所述消息中的具体信息;

a3.当截获一条通知时,通过sbn.getnotification().extras.getstring(notification.extra_xxx)获取通知的标题、图标、内容信息,从而处理和展示所述通知中的信息;

a4.移除android原生消息显示的应用,实现截获消息通知并屏蔽android原生消息。

进一步地,所述步骤b包括:

b1.注册通知监听服务;

b2.使用notificationlistenerservice的实例化对象通过反射机制调用类中的隐藏方法registerassystemservice();

b3.将notificationlistenerservice监听注册到系统底层,实现当系统底层收到消息时即回调监听,从而截获消息通知。

进一步地,所述步骤b还包括:

b4.在manifest文件中声明应用uid为android.uid.system,让程序运行在系统进程中,从而获得服务所需相关权限。

进一步地,所述步骤c包括:

c1.当截获一条通知后,在接收消息通知的方法中,获取通知的包名,与添加的限制包名进行比较以筛选消息通知,且只处理和展示通过筛选的通知;

c2.对通过筛选的通知进行二次封装,更改接收到的通知内容,使用自定义消息中心的自定义ui显示封装的通知信息。

进一步地,所述步骤c2中对通知进行二次封装,更改接收到的通知内容时包括更改通知的图标、标题。

本发明与现有技术相比,具有以下的有益效果:

本发明的实现android消息管控的方法,可实现ui可自定义,消息通知可二次封装,从而突破传统风格,实现定制化效果;可突破展示环境,不再局限于通知栏;且消息逻辑可控,可筛选消息应用,屏蔽不需要的消息;可实现完成组件自动注册,无需用户手动开启权限,给用户带来全新的体验。

附图说明

图1是本发明的实现android消息管控的方法的流程示意图。

具体实施方式

下面结合本发明的实施例对本发明作进一步的阐述和说明。

实施例:

实施例一:

如图1所示,一种实现android消息管控的方法,包括以下步骤:

步骤1.通过继承notificationlistenerservice,重写接收和移除通知的方法,并移除android原生消息显示的应用,实现截获消息通知并且屏蔽android原生消息。

具体的,为截获消息应用发送的通知,需要继承notificationlistenerservice,重写onnotificationposted()方法和onnotificationremoved()方法。则当收到一条消息时,会回调onnotificationposted(statusbarnotificationsbn)方法,其中,sbn中带有这条通知的具体信息。且当截获一条通知后,可通过sbn.getnotification().extras.getstring(notification.extra_xxx)获取通知的标题、图标、内容等,从而处理和展示通知的信息。同时,要屏蔽android原生消息,需要移除android原生消息显示这个应用,本实施例中,apk名称为systemui.apk。

步骤2.通过反射机制调用类中的隐藏方法registerassystemservice()注册服务,实现组件自动组册。

具体的,不注册通知监听服务就无法启动服务监听通知,所以需要注册通知监听服务。本方案中,自动注册组件的重点是使用notificationlistenerservice的实例化对象通过反射机制调用类中的隐藏方法registerassystemservice()。将notificationlistenerservice监听注册到系统底层,当系统底层收到消息,就会回调监听,从而截获消息通知。同时,由于该类是系统级别服务,调用类中的隐藏方法,需要系统权限,所以要在manifest文件中声明应用uid为android.uid.system,让程序运行在系统进程中,就可获得服务所需相关权限。

步骤3.通过对发送通知的消息应用进行包名限制,筛选消息应用并通过截获通知对内容进行二次封装,实现对消息通知的管控。

具体为,注册通知监听服务后,就可截获消息应用发送的通知,然后需要对消息通知管控。当截获一条通知后,在接收消息通知的方法中,获取通知的包名,与预先添加的限制包名进行比较以筛选消息应用,只处理和展示筛选后的通知。进一步地,本实施例中需要对通过筛选的通知进行二次封装更改接收到的通知内容,具体更改的内容包括如图标、标题等,即使用自定义消息中心的自定义ui显示封装的通知信息。

步骤4.通过自行启动一个后台服务为通知监听服务提供服务,解决引用context为空的问题。

在自动注册的通知监听服务中,由于注册的监听服务不会被启动,引用context为空,因此这本方案中自行开启一个后台常驻服务,为监听服务提供服务,传递context给监听服务,从而解决引用context为空的问题。

可以理解的是,以上实施方式仅仅是为了说明本发明的原理而采用的示例性实施方式,然而本发明并不局限于此。对于本领域内的普通技术人员而言,在不脱离本发明的精神和实质的情况下,可以做出各种变型和改进,这些变型和改进也视为本发明的保护范围。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1