状态栏通知的接管方法及装置的制造方法_2

文档序号:9376130阅读:来源:国知局
解本发明,首先介绍android的状态栏实现原理及架构。
[0037]本领域技术人员理解,整个android框架的基础是运行在system server (系统服务)进程中的服务。其中,Notificat1nManagerService (通知管理服务)和Notificat1nManager (通知管理)是负责管理和通知后台事件的服务,也就是实现状态栏通知的服务。发送一个状态栏通知必须用到两个类=Notificat1nManager和Notificat1n(通知)。其中,Notificat1nManager是状态栏通知的管理类,负责发通知、清除通知等。Notificat1nManager是一个系统Service (服务),必须通过getSystemService O方法来获取。Notificat1n是具体的状态栏通知对象,可以设置icon(图标格式)、文字、提示声音、振动等参数。例如,设置一个通知需要的基本参数包括:An icon (通知的图标);A title and expanded message (通知的标题和内容);APendingIntent (点击通知执行页面跳转);可选的参数包括:A ticker-text message (状态栏顶部提示消息);An alert sound (提示音);A vibrate setting (振动);A flashingLED setting (灯光)。
[0038]创建和显示一个Notificat1n需要如下5步:
[0039]1.通过 getSystemService 方法获得一个 Notificat1nManager 对象。
[0040]2.创建一个 Notif icat1n 对象。每一个 Notif icat1n 对应一个 Notif icat1n对象。在这一步需要设置显示在屏幕上方状态栏的通知消息、通知消息前方的图像资源ID和发出通知的时间。
[0041]3.由于Notificat1n可以与应用程序脱离。也就是说,即使应用程序被关闭,Notificat1n仍然会显示在状态栏中。当应用程序再次启动后,又可以重新控制这些Notificat1n。如清除或替换它们。因此,需要创建一个PendingIntent对象。该对象由Android系统负责维护,因此,在应用程序关闭后,该对象仍然不会被释放。
[0042]4.使用 Notificat1n 类的 setLatestEventlnfo 方法设置 Notificat1n 的详细信息。
[0043]5.使用 Notif icat1nManager 类的 notify 方法显不 Notif icat1n 消息。在这一步需要指定标识Notificat1n的唯一 ID。
[0044]参见图1,为状态栏实现架构示意图。首先,app层的应用程序通过Notificat1nManager.notify 方法向 framework 层的 Notificat1nManagerService发送状态栏通知;然后,在Notificat1nManagerService中,将应用程序发送的状态栏通知条目保存在列表中;最后,Notificat1nManagerService通过StatusBar.addNotif icat1n O方法向系统状态栏所在的SystemUi (系统用户界面)进程发送显示状态栏通知,这样应用程序发送的状态栏通知就会在系统状态栏中显示出来了。图1中,仅在app层以一个应用程序为例子,可以理解,以手机为例,可包括多个应用程序要显示状态栏通知。
[0045]通过图1可知,从app创建一个通知到将该通知显示在系统状态栏中,需要framework 层的 system_server 进程中的 Notificat1nManagerService 的处理和中转,最终由SystemUi负责显示。本发明中,通过android注入技术,在framework层中增加与app层状态栏管理器对应的状态栏接管服务,相当于在system_server进程中运行特定的代码,继而替换向SyStemUi发送命令的句柄,从而可以选择性阻断Notificat1nManagerService向sytemUi进程发送状态栏显示命令,达到接管状态栏的目的。
[0046]参见图2,为本发明实施例提供的状态栏通知的接管系统架构示意图。
[0047]状态栏通知接管实现分为两大部分。第一部分是在framework层增加的状态栏接管服务,运行在system_server进程中,用于根据预设条件过滤状态栏通知条目,从而仅在系统状态栏显示过滤之后的状态栏通知。也就是,通过代码注入方式,状态栏接管服务检测到system server进程调用状态栏通知显示命令的接口(API),由状态栏接管服务调用该接口,从而向SystemUi进程发送状态栏通知显示命令,仅显示满足过滤条件的状态栏通知。第二部分是运行在app层的状态栏管理器,通过调用Notificat1nManagerService,例如通过 GetAllNotificat1ns 方法调用 Notificat1nManagerService,可供用于查看所有当前状态栏通知列表,包括在系统状态栏中被隐藏的状态栏通知条目。可以理解,状态栏接管服务和状态栏管理器是对应的,可以理解状态栏接管的后台部分和用户界面部分,二者协同运行。一方面,状态栏管理器确定状态栏通知的过滤条件,将过滤条件提供给状态栏接管服务;另一方面,状态栏管理器调用systenuserver进程中的Notificat1nManagerService,从而获耳又并显不 Notificat1nManagerService 保存的列表中的所有状态栏通知。其中,状态栏管理器可以理解为一个应用程序实现的功能,例如360安全卫士中的一个功能。
[0048]其中,在上述第一部分的状态栏接管服务中,涉及根据预先设置的过滤条件对通知条目进行过滤,从而可以选择性的只接管某些(个)应用程序的状态栏通知。具体的,app层的状态栏管理器可以向用户提供设置过滤条件的界面,并且在用户设置完成后提供给状态栏接管服务。例如,用户可以选择某些IM(即时通讯)软件、网银类软件设为属于白名单的应用程序,这些应用程序的状态栏通知还是可以正常发送到系统状态栏。用户也可以选择某些软件为属于黑名单的应用程序,这些黑名单的应用程序的状态栏通知就不会发送到系统状态栏上了。当然,用户还可以采用白名单和黑名单结合的方式。其中,应用程序的白名单或者应用程序的黑名单可以由状态栏管理器预先获取并提供给用户,以便用户在设置过滤条件时参考。例如,通过云端服务器配置黑名单或者白名单的方式,获取到应用程序的白名单或者应用程序的黑名单。由于云端方案基于大量的样本运营和人工智能方法,包括沙箱、静态代码分析,动态代码特征扫描等方式,因此具有样本大而较为精准的优点。当然,也可以直接采用状态栏管理器默认的白名单或/和黑名单,而无需用户设置。
[0049]参见图3,为本发明实施例提供的一种状态栏通知的接管方法的流程图。其中,在操作系统的系统框架层(framework层)中设置与应用程序层(app层)中的状态栏管理器相对应的状态栏接管服务,该方法包括:
[0050]S301:在状态栏管理器中确定针对应用程序的状态栏通知的过滤条件;
[0051]如前所介绍的,状态栏管理器可以向用户提供设置界面,由用户设置过滤条件,例如,设置允许显示某一些应用程序的状态栏通知,以及,设置禁止显示另一些应用程序的状态栏通知。在具体实现时,可结合预先获取的应用程序白名单,允许显示应用程序白名单中应用程序的状态栏通知。同理,还可结合预先获取的应用程序黑名单,禁止显示应用程序黑名单中应用程序的状态栏通知。当然,应用程序白名单和应用程序黑名单可结合使用。用户可以在默认的应用程序白名单和/或应用程序黑名单基础上进行调整,也可以直接采用默认的方式。其中,应用程序白名单或应用程序黑名单的获取方式如前所述,可从云端服务器获取。
[0052]S302:状态栏管理器将过滤条件提供给状态栏接管服务;
[0053]如前所述,状态栏管理器和状态栏接管服务是分别位于app层和framework层实现本发明状态栏接管的两个部分,二者协同运行。在状态栏管理器确定了状态栏通知过滤条件之后,将过滤条件发送给状态栏接管服务。当然,也不排除状态栏接管服务内置或者直接获取过滤条件的实现方式。
[0054]S303:状态栏接管服务向系统用户界面(SystemUi)进程发送状态栏通知显示命令,指示系统用户界面(SystemUi)进程仅在智能终端上显示满足过滤条件的状态栏通知。
[0055]步骤S303之前,需要由状态栏接管服务代替现有技术中system server进程中的Notificat1nManagerService去调用SystemUi进程,具体的,不是由Notificat1nManagerService去调用SystemUi进程,而是通过代码注入方式,状态栏接管服务检测到system server进程调用状态栏通知显示命令的
当前第2页1 2 3 4 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1