CN110908764B - 一种实现Android消息管控的方法 - Google Patents
一种实现Android消息管控的方法 Download PDFInfo
- Publication number
- CN110908764B CN110908764B CN201911184592.6A CN201911184592A CN110908764B CN 110908764 B CN110908764 B CN 110908764B CN 201911184592 A CN201911184592 A CN 201911184592A CN 110908764 B CN110908764 B CN 110908764B
- Authority
- CN
- China
- Prior art keywords
- notification
- message
- android
- service
- application
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/451—Execution arrangements for user interfaces
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/54—Interprogram communication
- G06F9/546—Message passing systems or structures, e.g. queues
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Human Computer Interaction (AREA)
- Information Transfer Between Computers (AREA)
- Telephonic Communication Services (AREA)
Abstract
本发明公开了一种实现Android消息管控的方法,包括步骤:A.通过继承NotificationListenerService,重写接收和移除通知的方法,并移除Android原生消息显示的应用;B.通过反射机制调用类中的隐藏方法registerAsSystemService()注册服务,实现组件自动组册;C.通过对发送通知的消息应用进行包名限制,筛选消息应用并通过截获通知对内容进行二次封装,实现对消息通知的管控;D.通过自行启动一个后台服务为通知监听服务提供服务,解决引用Context为空的问题。本发明的方法可实现UI可自定义,消息通知可二次封装,从而突破传统风格,实现定制化效果,给用户带来全新的体验。
Description
技术领域
本发明涉及Android消息管控技术领域,特别涉及一种实现Android消息管控的方法。
背景技术
Android消息管控是对Notification(通知)进行管控。Notification是一种具有全局效果的通知。它展示在屏幕的顶端,Android原生消息通知对系统收到的Notification首先会表现为一个图标的形式,当用户下拉通知栏可查看通知详细信息。状态栏和抽屉式通知栏都是系统控制,用户可随时查看。
目前,Android消息管控仅表现在消息应用发送通知,系统收到通知后,将通知显示在通知栏上,由系统对通知进行管控。本发明的Android消息管控方法则是通过自定义的消息中心使用NotificationListenerService监听截获应用发送的通知,屏蔽Android原生消息,自动注册通知监听服务,筛选消息应用并可对消息通知进行二次封装,实现对消息通知的管控。NotificationListenerService是Android API 18引入的一个类,通知监听服务,用于监听系统收到的通知,处理通知的接收和移除。如果注册了这个服务,当任何一条通知到来或者被移除掉,都能用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(StatusBarNotification sbn)方法,其中,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为空的问题。
可以理解的是,以上实施方式仅仅是为了说明本发明的原理而采用的示例性实施方式,然而本发明并不局限于此。对于本领域内的普通技术人员而言,在不脱离本发明的精神和实质的情况下,可以做出各种变型和改进,这些变型和改进也视为本发明的保护范围。
Claims (3)
1.一种实现Android消息管控的方法,其特征在于,包括以下步骤:
A.通过继承NotificationListenerService,重写接收和移除通知的方法,并移除Android原生消息显示的应用,实现截获消息通知并且屏蔽Android原生消息;所述步骤A具体包括:
A1.继承NotificationListenerService,重写onNotificationPosted()方法和onNotificationRemoved()方法;
A2.当收到一条消息时,回调onNotificationPosted(StatusBarNotification sbn)方法,其中,sbn中带有所述消息中的具体信息;
A3.当截获一条通知时,通过sbn.getNotification().extras.getString(Notification.EXTRA_XXX)获取通知的标题、图标、内容信息,从而处理和展示所述通知中的信息;
A4.移除Android原生消息显示的应用,实现截获消息通知并屏蔽Android原生消息;
B.通过反射机制调用类中的隐藏方法registerAsSystemService()注册服务,实现组件自动组册;所述步骤B包括:
B1.注册通知监听服务;
B2.使用NotificationListenerService的实例化对象通过反射机制调用类中的隐藏方法registerAsSystemService();
B3.将NotificationListenerService监听注册到系统底层,实现当系统底层收到消息时即回调监听,从而截获消息通知;
C.通过对发送通知的消息应用进行包名限制,筛选消息应用并通过截获通知对内容进行二次封装,实现对消息通知的管控;所述步骤C包括:
C1.当截获一条通知后,在接收消息通知的方法中,获取通知的包名,与添加的限制包名进行比较以筛选消息通知,且只处理和展示通过筛选的通知;
C2.对通过筛选的通知进行二次封装,更改接收到的通知内容,使用自定义消息中心的自定义UI显示封装的通知信息;
D.通过自行启动一个后台服务为通知监听服务提供服务,解决引用Context为空的问题。
2.根据权利要求1所述的一种实现Android消息管控的方法,其特征在于,所述步骤B还包括:
B4.在Manifest文件中声明应用UID为android.uid.system,让程序运行在系统进程中,从而获得服务所需相关权限。
3.根据权利要求1所述的一种实现Android消息管控的方法,其特征在于,所述步骤C2中对通知进行二次封装,更改接收到的通知内容时包括更改通知的图标、标题。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201911184592.6A CN110908764B (zh) | 2019-11-27 | 2019-11-27 | 一种实现Android消息管控的方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201911184592.6A CN110908764B (zh) | 2019-11-27 | 2019-11-27 | 一种实现Android消息管控的方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN110908764A CN110908764A (zh) | 2020-03-24 |
CN110908764B true CN110908764B (zh) | 2021-06-22 |
Family
ID=69818555
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201911184592.6A Active CN110908764B (zh) | 2019-11-27 | 2019-11-27 | 一种实现Android消息管控的方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN110908764B (zh) |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103338114A (zh) * | 2013-06-05 | 2013-10-02 | 四川长虹电器股份有限公司 | 一种基于Android系统通知消息的交互方法 |
CN106557330A (zh) * | 2016-11-30 | 2017-04-05 | 北京奇虎科技有限公司 | 移动终端系统通知栏通知信息处理方法、装置和移动终端 |
CN106649397A (zh) * | 2015-11-03 | 2017-05-10 | 任子行网络技术股份有限公司 | 用于破解移动应用推送消息的方法和系统 |
CN106775699A (zh) * | 2016-12-09 | 2017-05-31 | 武汉斗鱼网络科技有限公司 | 在异步线程中更新ui的方法 |
CN108319835A (zh) * | 2018-01-31 | 2018-07-24 | 北京小米移动软件有限公司 | 用户空间访问控制方法、装置、设备及存储介质 |
Family Cites Families (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9955332B2 (en) * | 2009-01-28 | 2018-04-24 | Headwater Research Llc | Method for child wireless device activation to subscriber account of a master wireless device |
KR20160097415A (ko) * | 2015-02-06 | 2016-08-18 | 이강우 | 안드로이드 플랫폼상에서의 멀티윈도우 구동 어플리케이션 및 이를 구비한 터치 디바이스 |
-
2019
- 2019-11-27 CN CN201911184592.6A patent/CN110908764B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103338114A (zh) * | 2013-06-05 | 2013-10-02 | 四川长虹电器股份有限公司 | 一种基于Android系统通知消息的交互方法 |
CN106649397A (zh) * | 2015-11-03 | 2017-05-10 | 任子行网络技术股份有限公司 | 用于破解移动应用推送消息的方法和系统 |
CN106557330A (zh) * | 2016-11-30 | 2017-04-05 | 北京奇虎科技有限公司 | 移动终端系统通知栏通知信息处理方法、装置和移动终端 |
CN106775699A (zh) * | 2016-12-09 | 2017-05-31 | 武汉斗鱼网络科技有限公司 | 在异步线程中更新ui的方法 |
CN108319835A (zh) * | 2018-01-31 | 2018-07-24 | 北京小米移动软件有限公司 | 用户空间访问控制方法、装置、设备及存储介质 |
Non-Patent Citations (1)
Title |
---|
SystemUI-应用知栏视图是如何夸进程显示?;大利猫;《https://www.imooc.com/article/263963》;20181123;第1-7页 * |
Also Published As
Publication number | Publication date |
---|---|
CN110908764A (zh) | 2020-03-24 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US9973506B2 (en) | Method and apparatus for clearing notification icon, and storage medium | |
CN105847430B (zh) | 混合应用页面数据访问方法和装置 | |
CN108701000A (zh) | 处理通知的方法及电子设备 | |
US20080229280A1 (en) | Systems and methods for composing custom applications from software components | |
CN103595766B (zh) | 实现扩展应用程序的推送通知的方法及装置 | |
CN107197357B (zh) | 一种播放中视频的截取方法及装置 | |
CN101583942A (zh) | 为手持设备实施主题的方法和设备 | |
CN106230843A (zh) | 一种为智能手机配置云虚拟手机的方法、服务器和系统 | |
CN107038358B (zh) | 一种自启动处理方法和装置及移动终端 | |
CN105242923B (zh) | 数据处理进度的显示控制装置和方法 | |
CN103064732A (zh) | 通过消息管理器对第三方应用消息接管的方法 | |
CN105095749B (zh) | 状态栏通知的接管方法及装置 | |
JP7043604B2 (ja) | 通知リマインド方法、グループ追加方法、装置、端末、および記憶媒体 | |
WO2016206569A1 (zh) | 一种消息管理方法及装置 | |
WO2022247503A1 (zh) | 数据内容处理方法、装置、终端及存储介质 | |
CN107707722A (zh) | 短信拦截处理方法和装置 | |
CN110908764B (zh) | 一种实现Android消息管控的方法 | |
CN107515792B (zh) | 功能类使用Handler进行消息处理的方法和装置 | |
CN106843977A (zh) | 一种应用程序自启动的处理方法、装置及移动终端 | |
EP3089009A1 (en) | Display processing method for transient interface, and terminal | |
CN110888683A (zh) | 操作系统的性能优化方法、装置及可读介质 | |
WO2019114352A1 (zh) | 一种应用通知管控方法、装置和终端 | |
CN115086305A (zh) | 信息处理方法、装置、电子设备和存储介质 | |
JP2005122732A (ja) | 電気通信端末用のメッセージ処理デバイス | |
EP4274237A1 (en) | Information display method and apparatus, and device and medium |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |