悬浮窗显示设置、控制方法和装置的制造方法

xiaoxiao2020-10-23  13

悬浮窗显示设置、控制方法和装置的制造方法
【专利说明】
【技术领域】
[0001]本发明涉及智能设备的广告拦截技术,具体而言,不仅涉及一种悬浮窗显示设置方法和装置;还涉及一种悬浮窗显示控制方法和装置。
【【背景技术】】
[0002]目前,手机上的应用程序得到指数级增长,应用程序的安装又丰富了智能手机的功能。但是有一些应用程序开发者为了广告推广费用,会在自己的应用程序中内置广告平台,当用户在智能终端中安装了内置有广告平台的应用程序后,广告平台会在系统后台自动运行,自动推送出一些广告页面,给用户造成干扰,更有甚者会侵犯用户的隐私,损害用户的利益。为了保障用户的利益,各安全软件公司开发了多种不同的广告过滤软件,主要包括有基于特征库分析的广告过滤软件、匹配程序特征码的广告过滤软件,用以对网页中的通知栏广告、游戏、购物网页等广告进行过滤。
[0003]但是随着安全软件公司加强对恶意通知栏广告的识别和拦截,一些广告软件另辟蹊径,开始使用智能终端操作系统的显示接口,在操作系统界面绘制一些悬浮的广告窗口,使得绘制的悬浮窗可以覆盖在任何应用程序之上,这样,能够避免广告过滤软件的过滤,并且用户无法知晓该悬浮窗是哪个应用程序显示的。例如,在智能终端的显示界面,利用操作系统显示接口显示的恶意悬浮窗中,通过要求用户注册或要求用户下载该恶意广告软件。弹出的悬浮窗广告,对用户造成了干扰和困惑,而且有可能在用户使用网银等应用程序软件时,被欺骗在恶意应用程序软件弹出的悬浮窗中输入敏感信息,导致不必要的物质损失以及隐私信息泄露,而对该类悬浮窗广告,现有技术还没有提出较好的拦截方法。

【发明内容】

[0004]本发明的首要目的在于克服上述的至少一个问题,而提供一种悬浮窗显示设置方法和装置。
[0005]本发明的另一目的在于克服上述的至少一个问题,而提供一种悬浮窗显示控制方法和装置。
[0006]为实现本发明的目的,本发明采取如下技术方案:
[0007]本发明提供了一种悬浮窗显示设置方法,包括以下步骤:
[0008]接收由注册到系统底层的后台服务进程监听而产生的显示于系统桌面的悬浮窗被添加的行为的事件通知;
[0009]显示指令接收界面以接收用户指令,将用户指令与该事件通知所提供的悬浮窗特征信息关联性存储以实施设置;
[0010]响应于表征禁止悬浮窗显示的用户指令,通知所述后台服务进程控制所述悬浮窗从系统桌面中消失。
[0011]具体的,通过识别用于显示悬浮窗的流程的函数或显示服务接口而实现所述对悬浮窗行为的监听。
[0012]根据本发明的一个实施例所揭示,所述悬浮窗特征信息依据绘制所述悬浮窗的属性值而获得。
[0013]根据本发明的另一实施例所揭示,所述悬浮窗特征信息依据监听到的所述悬浮窗被添加时处于系统最顶层的应用程序进程而确定该应用程序的包名和/或MD5签名作为所述的特征信息。
[0014]根据本发明的又一实施例所揭示,所述悬浮窗特征信息依据监听到的所述悬浮窗的添加函数的资源路径而确定悬浮窗所属应用程序的包名和/或MD5签名作为所述的特征信息。
[0015]具体的,所述悬浮窗的属性值是指窗口布局文件路径消息、窗口图片资源文件路径信息、窗口布局文件名称信息、窗口图片资源文件名称信息、窗口文本文字信息、窗口布局大小和位置信息中的一种或其任意组合。
[0016]具体的,所述用户指令包括所述表征禁止悬浮窗显示的用户指令,也包括表征允许悬浮窗显示的用户指令。
[0017]具体的,所述用户指令与相应的悬浮窗特征信息以其映射关系关联性存储于预设列表中,该预设列表存储于本地或远程服务器。
[0018]较佳的,所述后台服务进程产生移除指令使所述悬浮窗从系统桌面中消失,或通过设置所述悬浮窗的显示属性为不可见使所述悬浮窗从系统桌面中消失。
[0019]具体的,所述后台服务进程对添加所述悬浮窗的添加函数的运行入口点挂钩而监听悬浮窗的添加行为,从而形成所述的事件通知。所述后台服务进程挂钩的添加函数为WindowManager.addView()。
[0020]具体的,所述后台服务进程基于获取Root权限为前提而被添加到系统底层。具体的,通过调用SystemService.addService O函数而将所述后台服务进程添加到系统底层。
[0021]具体的,所述后台服务进程运行于系统的框架层,将所述事件通知发送到系统的应用层。
[0022]进一步的,在接收到表征禁止悬浮窗显示的用户指令后,所述方法还包括:对所述事件通知所提供的悬浮窗所属的应用程序进行安全扫描;和/或卸载该应用程序;和/或对该应用程序设置隐私访问权限。
[0023]进一步的,该方法还包括如下步骤:
[0024]响应于表征允许悬浮窗显示的用户指令,向后台服务进程返回空值。
[0025]进一步的,该方法包括如下步骤:
[0026]接收基于所述悬浮窗后续产生的所述的事件通知,依据所述已关联性存储的用户指令与悬浮窗特征信息的映射关系而确定相应的用户指令,依据所述的用户指令控制该悬浮窗的显示状态。
[0027]本发明提供了一种悬浮窗显示设置装置,包括:
[0028]通知接收模块,用于接收由注册到系统底层的后台服务进程监听而产生的显示于系统桌面的悬浮窗被添加的行为的事件通知;
[0029]指令接收模块,用于显示指令接收界面以接收用户指令,将用户指令与该事件通知所提供的悬浮窗特征信息关联性存储以实施设置;
[0030]处理模块,用于响应于表征禁止悬浮窗显示的用户指令,通知所述后台服务进程控制所述悬浮窗从系统桌面中消失。
[0031]进一步的,所述通知接收模块包括有通知接收模块,所述通知接收模块被配置为通过识别用于显示悬浮窗的流程的函数或显示服务接口而实现所述对悬浮窗行为的监听。
[0032]根据本发明中一个实施例所揭示,所述指令接收模块包括有预设单元,所述预设单元被配置为依据绘制所述悬浮窗的属性值而获得所述悬浮窗特征信息。
[0033]根据本发明中另一个实施例所揭示,所述预设单元还被配置为依据监听到的所述悬浮窗被添加时处于系统最顶层的应用程序进程而确定该应用程序的包名和/或MD5签名作为所述悬浮窗特征信息。
[0034]根据本发明中又一个实施例所揭示,所述预设单元还被配置为依据监听到的所述悬浮窗的添加函数的资源路径而确定悬浮窗所属应用程序的包名和/或MD5签名作为所述悬浮窗特征信息。
[0035]具体的,所述悬浮窗的属性值是指窗口布局文件路径消息、窗口图片资源文件路径信息、窗口布局文件名称信息、窗口图片资源文件名称信息、窗口文本文字信息、窗口布局大小和位置信息中的一种或其任意组合。
[0036]具体的,所述用户指令包括所述表征禁止悬浮窗显示的用户指令,也包括表征允许悬浮窗显示的用户指令。
[0037]具体的,所述用户指令与相应的悬浮窗特征信息以其映射关系关联性存储于预设列表中,所述指令接收模块被配置为将该预设列表存储于本地或远程服务器。
[0038]较佳的,所述处理模块被配置为通知所述后台服务进程产生移除指令使所述悬浮窗从系统桌面中消失,或通过设置所述悬浮窗的显示属性为不可见使所述悬浮窗从系统桌面中消失。
[0039]具体的,所述通知接收模块被配置为通知后台服务进程对添加所述悬浮窗的添加函数的运行入口点挂钩而监听悬浮窗的添加行为,从而形成所述的事件通知。所述后台服务进程挂钩的添加函数为WindowManager.addView ()。
[0040]具体的,所述后台服务进程基于获取Root权限为前提而被添加到系统底层。
[0041]具体的,所述通知接收模块通过调用SystemService.addService O函数而将所述后台服务进程添加到系统底层。
[0042]具体的,所述后台服务进程运行于系统的框架层,将所述事件通知发送到系统的应用层。
[0043]进一步的,在接收到表征禁止悬浮窗显示的用户指令后,所述处理模块还被配置为:对所述事件通知所提供的悬浮窗所属的应用程序进行安全扫描;和/或卸载该应用程序;和/或对该应用程序设置隐私访问权限。
[0044]进一步的,所述处理模块还被配置为:响应于表征允许悬浮窗显示的用户指令,向后台服务进程返回空值。
[0045]进一步的,所述通知接收模块还被配置为接收基于所述悬浮窗后续产生的所述的事件通知,所述指令接收模块依据所述已关联性存储的用户指令与悬浮窗特征信息的映射关系而确定相应的用户指令,所述处理模块依据所述的用户指令控制该悬浮窗的显示状
??τ O
[0046]本发明提供的一种悬浮窗显示控制方法,包括以下步骤:
[0047]接收由注册到系统底层的后台服务进程截获悬浮窗添加行为而产生的事件通知;
[0048]以所述事件通知所提供的悬浮窗特征信息查询预设列表以从中确定与之相对应的用户指令;
[0049]响应于其中表征允许或禁止悬浮窗显示的用户指令,通知后台服务进程放行或拦截该悬浮窗的显示行为。
[0050]具体的,所述的预设列表包含有预设置的所述悬浮窗特征信息与相应的用户指令之间的映射关系数据。
[0051]具体的,通过识别用于显示悬浮窗的流程的函数或显示服务接口而实现所述对悬浮窗行为的截获。
[0052]根据本发明中一个实施例所揭示,所述悬浮窗特征信息依据绘制所述悬浮窗的属性值而获得。
[0053]根据本发明中另一个实施例所揭示,所述悬浮窗特征信息依据监听到的所述悬浮窗被添加时处于系统最顶层的应用程序进程而确定该应用程序的包名和/或MD5签名作为所述的特征信息。
[0054]根据本发明中又一个实施例所揭示,所述悬浮窗特征信息依据监听到的所述悬浮窗的添加函数的资源路径而确定悬浮窗所属应用程序的包名和/或MD5签名作为所述的特征信息。
[0055]较佳的,所述预设列表存储于远程服务器中,通过发送包含所述特征信息的远程请求并接收相应的反馈数据而获得所述的用户指令。
[0056]具体的,响应于表征禁止悬浮窗的用户指令,所述后台服务进程产生移除指令,或通过设置所述悬浮窗的显示属性为不可见,或直接绕过添加所述悬浮窗的添加指令,实现对所述悬浮窗的显示拦截。
[0057]具体的,所述悬浮窗的属性值是指窗口布局文件路径消息、窗口图片资源文件路径信息、窗口布局文件名称信息、窗口图片资源文件名称信息、窗口文本文字信息、窗口布局大小和位置信息中的一种或其任意组合。
[0058]具体的,所述后台服务进程对添加所述悬浮窗的添加函数的运行入口点挂钩而监听悬浮窗的添加行为,从而形成所述的事件通知。所述后台服务进程挂钩的添加函数为WindowManager.addView()。
[0059]具体的,所述后台服务进程基于获取Root权限为前提而被添加到系统底层。通过调用SystemService.addService O函数而将所述后台服务进程添加到系统底层。
[0060]具体的,所述后台服务进程运行于系统的框架层,将所述事件通知发送到系统的应用层。
[0061]进一步的,响应于表征允许悬浮窗显示的用户指令,向后台服务进程返回空值以使该悬浮窗显示到系统桌面。
[0062]本发明提供的一种悬浮窗显示控制装置,包括:
[0063]通知接收模块,用于接收由注册到系统底层的后台服务进程截获悬浮窗添加行为而产生的事件通知;
[0064]查询模块,用于以所述事件通知所提供的悬浮窗特征信息查询预设列表以从中确定与之相对应的用户指令;
[0065]控制模块,用于响应于其中表征允许或禁止悬浮窗显示的用户指令,通知后台服务进程放行或拦截该悬浮窗的显示行为。
[0066]具体的,所述的预设列表包含有预设置的所述悬浮窗特征信息与相应的用户指令之间的映射关系数据。
[0067]较佳的,所述通知接收模块还被配置为通过识别用于显示悬浮窗的流程的函数或显示服务接口而实现所述对悬浮窗行为的截获。
[0068]根据本发明的一个实施例所揭示,所述查询模块还包括有设置单元,所述设置单元被配置为依据绘制所述悬浮窗的属性值而获得所述悬浮窗特征信息。
[0069]根据本发明的另一个实施例所揭示,所述设置单元还被配置为依据监听到的所述悬浮窗被添加时处于系统最顶层的应用程序进程而确定该应用程序的包名和/或MD5签名作为所述悬浮窗特征信息。
[0070]根据本发明的又一个实施例所揭示,所述设置单元还被配置为依据监听到的所述悬浮窗的添加函数的资源路径而确定悬浮窗所属应用程序的包名和/或MD5签名作为所述悬浮窗特征信息。
[0071]较佳的,所述预设列表存储于远程服务器中,所述查询模块被配置为通过发送包含所述特征信息的远程请求并接收相应的反馈数据而获得所述的用户指令。
[0072]具体的,响应于表征禁止悬浮窗的用户指令,所述控制模块被配置为通知后台服务进程产生移除指令,或通过设置所述悬浮窗的显示属性为不可见,或直接绕过添加所述悬浮窗的添加指令,实现对所述悬浮窗的显示拦截。
[0073]具体的,所述悬浮窗的属性值是指窗口布局文件路径消息、窗口图片资源文件路径信息、窗口布局文件名称信息、窗口图片资源文件名称信息、窗口文本文字信息、窗口布局大小和位置信息中的一种或其任意组合。
[0074]具体的,所述通知接收模块被配置为通知后台服务进程对添加所述悬浮窗的添加函数的运行入口点挂钩而监听悬浮窗的添加行为,从而形成所述的事件通知。所述后台服务进程挂钩的添加函数为WindowManager.addView ()。
[0075]具体的,所述后台服务进程基于获取Root权限为前提而被添加到系统底层。
[0076]具体的,所述通知接收模块被配置为通过调用SystemService.addService O函数而将所述后台服务进程添加到系统底层。
[0077]较佳的,所述后台服务进程运行于系统的框架层,将所述事件通知发送到系统的应用层。
[0078]进一步的,所述控制模块还被配置为响应于表征允许悬浮窗显示的用户指令,向后台服务进程返回空值以使该悬浮窗显示到系统桌面。
[0079]与现有技术相比,本发明具备如下优点:
[0080]1、本发明通过在系统底层注册后台服务进程来监听显示于系统桌面的悬浮窗被添加的行为,并显示指令接收界面以接收用户指令控制该悬浮窗的显示和消失;即一旦系统桌面中弹出悬浮窗,随即会显示指令接收界面来询问用户,便能根据用户的指令有效的控制该悬浮窗的显示行为。并将用户指令与该添加事件通知所提供的悬浮窗特征信息关联性存储为预设列表,当出现悬浮窗添加行为 时,可直接通过悬浮窗特征信息查询预设列表中与该悬浮窗对应的预先存储的用户指令,根据用户指令来放行或拦截该悬浮窗的显示行为;由此解决了现有技术中不能对悬浮窗的显示进行有效拦截的技术问题,通过查找预设列表的方式能提升悬浮窗拦截效率,提升用户操作智能终端的体验。
[0081]2、将用户指令与该添加事件通知所提供的悬浮窗特征信息关联性存储为预设列表,其中悬浮窗特征信息范围全面,既能是绘制所述悬浮窗的属性值,如窗口布局文件名称信息和路径信息、窗口图片资源文件名称信息和路径信息、窗口布局大小和位置信息等;悬浮窗特征信息又能是该悬浮窗所述的应用程序的包名和/或MD5签名。在具体实施时,通过范围全面的悬浮窗特征信息来查找预设列表,根据列表中预存的用户指令实现对悬浮窗的显示设置和控制,提高了系统对悬浮窗显示设置和控制的准确性,降低漏查和误查的几率。
[0082]3、本发明中通过注册到系统底层的后台服务进程,来监听悬浮窗被添加时处于系统最顶层的应用程序进程或监测悬浮窗的添加函数被调用的资源路径,来判定出悬浮窗所属的应用程序,继而建立应用程序包名和/或签名与对应的用户指令的预设列表,当再次监听到该应用程序添加悬浮窗时,可直接采用应用程序包名和/或签名查找预设表格中对应的用户指令来设置和控制悬浮窗的显示。当用户每次运行该应用程序时,都能直接通过该程序包名和/或签名查找到预先设置的用户指令控制所述悬浮窗的显示,进一步提高了悬浮窗的拦截效率。
[0083]4、本发明在系统的底层注册一个后台服务进程,在悬浮窗的添加函数WindowManager.addView()的运行入口点挂钩钩子函数。一旦后台服务进程监测到系统中出现悬浮窗添加行为时,后台服务进程会立刻转向执行钩子函数,进一步通过用户指令来设置和控制悬浮窗的显示。通过后台服务进程与注入系统中钩子函数进行交互,能够更强地掌握系统的控制权,并且及时高效地对悬浮窗添加行为做出响应,大大增强了系统的可靠性。
[0084]5、本发明进一步结合云端技术实现,通过发送包含所述悬浮窗特征信息的远程请求并接收远程服务器反馈的数据获得相应的用户指令,由于远程服务器中的数据更全面科学,使得得到的用户指令也更加科学精确,具有普遍适应性,从而可以避免造成误判,进一步提尚系统可靠性。
[0085]综上所分析,本发明的实施,通过在系统底层注册后台服务进程来监听显示于系统桌面的悬浮窗被添加的行为,以接收用户指令设置该悬浮窗的显示和消失,或根据预设列表中对应的用户指令控制该悬浮窗是否显示,解决了现有技术中不能对悬浮窗的显示进行有效拦截的技术问题,通过查找预设列表的方式能提升悬浮窗拦截效率,提升用户操作智能终端的体验。
[0086]本发明附加的方面和优点将在下面的描述中部分给出,这些将从下面的描述中变得明显,或通过本发明的实践了解到。
【【附图说明】】
[0087]本发明上述的和/或附加的方面和优点从下面结合附图对实施例的描述中将变得明显和容易理解,其中:
[0088]图1是本发明的悬浮窗显示设置方法的一个实施例的流程示意图;
[0089]图2是本发明的悬浮窗显示设置装置的一个实施例的原理框图;
[0090]图3是本发明的悬浮窗显示控制方法的一个实施例的流程示意图;
[0091]图4是本发明的悬浮窗显示控制装置的一个实施例的原理框图;
[0092]图5是本发明的一个实施例具体应用场景中的系统桌面显示图。
【【具体实施方式】】
[0093]下面结合附图和示例性实施例对本发明作进一步地描述,其中附图中相同的标号全部指的是相同的部件。此外,如果已知技术的详细描述对于示出本发明的特征是不必要的,则将其省略。
[0094]下面详细描述本发明的实施例,所述实施例的示例在附图中示出,其中自始至终相同或类似的标号表示相同或类似的元件或具有相同或类似功能的元件。下面通过参考附图描述的实施例是示例性的,仅用于解释本发明,而不能解释为对本发明的限制。
[0095]本技术领域技术人员可以理解,除非特意声明,这里使用的单数形式“一”、“一个”、“所述”和“该”也可包括复数形式。应该进一步理解的是,本发明的说明书中使用的措辞“包括”是指存在所述特征、整数、步骤、操作、元件和/或组件,但是并不排除存在或添加一个或多个其他特征、整数、步骤、操作、元件、组件和/或它们的组。应该理解,当我们称元件被“连接”或“耦接”到另一元件时,它可以直接连接或耦接到其他元件,或者也可以存在中间元件。此外,这里使用的“连接”或“耦接”可以包括无线连接或无线耦接。这里使用的措辞“和/或”包括一个或更多个相关联的列出项的全部或任一单元和全部组合。
[0096]本技术领域技术人员可以理解,除非另外定义,这里使用的所有术语(包括技术术语和科学术语),具有与本发明所属领域中的普通技术人员的一般理解相同的意义。还应该理解的是,诸如通用字典中定义的那些术语,应该被理解为具有与现有技术的上下文中的意义一致的意义,并且除非像这里一样被特定定义,否则不会用理想化或过于正式的含义来解释。
[0097]本技术领域技术人员可以理解,这里所使用的“终端”、“终端设备”既包括无线信号接收器的设备,其仅具备无发射能力的无线信号接收器的设备,又包括接收和发射硬件的设备,其具有能够在双向通信链路上,执行双向通信的接收和发射硬件的设备。这种设备可以包括:蜂窝或其他通信设备,其具有单线路显示器或多线路显示器或没有多线路显示器的蜂窝或其他通信设备;PCS (Personal Communicat1ns Service,个人通信系统),其可以组合语音、数据处理、传真和/或数据通信能力;PDA (Personal Digital Assistant,个人数字助理),其可以包括射频接收器、寻呼机、互联网/内联网访问、网络浏览器、记事本、日历和/或GPS (Global Posit1ning System,全球定位系统)接收器;常规膝上型和/或掌上型计算机或其他设备,其具有和/或包括射频接收器的常规膝上型和/或掌上型计算机或其他设备。这里所使用的“终端”、“终端设备”可以是便携式、可运输、安装在交通工具(航空、海运和/或陆地)中的,或者适合于和/或配置为在本地运行,和/或以分布形式,运行在地球和/或空间的任何其他位置运行。这里所使用的“终端”、“终端设备”还可以是通信终端、上网终端、音乐/视频播放终端,例如可以是PDA、MID(Mobile Internet Device,移动互联网设备)和/或具有音乐/视频播放功能的移动电话,也可以是智能电视、机顶盒等设备。
[0098]本技术领域技术人员可以理解,这里所使用的服务器、云端、远端网络设备等概念,具有等同效果,其包括但不限于计算机、网络主机、单个网络服务器、多个网络服务器集或多个服务器构成的云。在此,云由基于云计算(Cloud Computing)的大量计算机或网络服务器构成,其中,云计算是分布式计算的一种,由一群松散耦合的计算机集组成的一个超级虚拟计算机。本发明的实施例中,远端网络设备、终端设备与WNS服务器之间可通过任何通信方式实现通信,包括但不限于,基于3GPP、LTE、WIMAX的移动通信、基于TCP/IP、UDP协议的计算机网络通信以及基于蓝牙、红外传输标准的近距无线传输方式。
[0099]本领域技术人员应当理解,本发明所称的“应用”、“应用程序”、“应用软件”以及类似表述的概念,是业内技术人员所公知的相同概念,是指由一系列计算机指令及相关数据资源有机构造的适于电子运行的计算机软件。除非特别指定,这种命名本身不受编程语言种类、级别,也不受其赖以运行的操作系统或平台所限制。理所当然地,此类概念也不受任何形式的终端所限制。
[0100]需要说明的是,本发明试图结合计算机程序的静态和动态两个方面进行描述,所谓静态方面,是指程序安装包、文件、数据库等存储于媒介的存储对象;所谓动态方面,是指被调入内存中执行的动态对象,包括但不局限于进程、线程、所用到的数据等。鉴于计算机软件技术的这些特点,不应将本发明所述及的各个方法、步骤、子步骤、装置、单元、模块、子模块等,孤立地理解为仅静态或仅动态的方面,本领域技术人员对此应当知晓。故而,本领域技术人员应当能够依据本发明有关静态的表述而将其对应到动态的进程活动,或者依据本发明有关动态的进程活动对应到其静态的表现形式,建立起静态与动态两方面的必然性关联,以此为基础来理解本发明。
[0101]为了实现本发明的功能,通过安全APP在系统底层注册后台服务进程来监听显示于系统桌面的悬浮窗被添加的行为,而在向系统底层注册后台服务进程时首先要获取Root权限,将后台服务进程安装并运行于相关操作系统中。
[0102]众所周知,Root权限是指Unix类操作系统(包括Linux、Android)的系统管理员权限,类似于Windows (视窗)系统中的Administrator (管理员)权限;Root权限可以访问和修改用户的移动设备中几乎所有的文件(Android系统文件及用户文件,不包括ROM)。但是,由于目前智能终端系统对于Root权限的管理是非常严格的,通常情况下多数应用或程序都不具备Root权限,因此对于某些需要具备Root权限的操作就无法执行,例如安装或卸载应用等操作;同时,此类操作调用进程每次执行相应操作时都需要向系统申请Root权限,但如果此时其他应用进程正在使用Root权限进行相关操作,则此调用进程的Root权限申请便无法成功;更甚者,如果用户在系统中设置了禁用Root权限的操作,则相关调用进程便无法进行相关操作。基于此,本发明提出只需要向系统发送一次Root权限获取请求,具体可通过调用系统内置的SU(Super User,超级用户)命令获取Root权限,或者通过获取具有Root权限的shell获取Root权限并在shell中启动进程,然后在获取所述系统的Root权限授权后,即可使后续其他调用进程需执行相关操作时无需重复申请Root权限;具体Root权限获取过程可参照现有技术的Root权限调用函数,本发明在此不再赘述。
[0103]现有的悬浮窗显示方法,利用智能终端操作系统的显示接口在操作系统界面上进行显示,而且悬浮窗可以覆盖在任何应用程序界面之上,这样,可以避免广告过滤软件的过滤,并且用户无法知晓该悬浮窗是哪个应用程序显示的,因而,还没有针对该类悬浮窗进行有效拦截的方法。
[0104]本发明可以通过安全APP进程在系统底层注册后台服务进程来监听显示于系统桌面的悬浮窗被添加的行为,显示指令接收界面以接收用户指令,控制该悬浮窗的显示和消失;即一旦系统桌面中弹出悬浮窗,随即会显示指令接收界面来询问用户,便能根据用户的指令有效的控制该悬浮窗的显示行为。并将用户指令与该添加事件通知所提供的悬浮窗特征信息关联性存储为预设列表,当再次出现该悬浮窗添加行为时,可直接通过悬浮窗特征信息查询预设列表中与该悬浮窗对应的预先存储的用户指令,根据用户指令来放行或拦截该悬浮窗的显示行为。
[0105]本发明的整体构思可以灵活地体现在两个方面,因此,本发明提供了两种方法来描述【具体实施方式】,下文将分别介绍所述的两种方法。
[0106]本发明实施例中,以安装有安卓(Android)系统的智能终端设备为例进行示例性说明,但应该说明的是,该描述仅是示例性的,本发明的范围并不限于此,本发明实施例的方法和装置也可适用于其他操作系统,例如,Linux操作系统、1S操作系统、Window Phone操作系统等的智能终端设备。
[0107]首先介绍方法一,结合图1详细揭示本发明的一种悬浮窗显示设置方法,该方法的执行,是通过安全APP进程提供的钩子函数来实现的,该钩子函数与所述的后台服务进程进行通信,后台服务进程回调该钩子函数,并向其传递参数,从而实现所述的悬浮窗被添加的行为的事件通知。同理,钩子函数可以将处理结果通知到后台服务进程,以便后台服务进程完成后续的流程。
[0108]该方法包括如下步骤:
[0109]S11、接收由注册到系统底层的后台服务进程监听而产生的显示于系统桌面的悬浮窗被添加的行为的事件通知。
[0110]本实施例所述的后台服务进程,是指由以本方法所实现的一个程序模块,运行于内存中,通过内存中的相应安全APP主进程实现如前所述的提权操作后,向系统注册的一个通信服务进程。总所周知,Zygote进程孵化了所有的Android应用进程,是Android框架层的基础,该进程的启动标志着系统框架初始化启动的开始。Zygote fork出一个新的进程,即SystemServer进程。本发明所述的后台服务进程也由SystemServer启动,预先向System Manager注册一个后台服务进程,使该后台服务进程运行于系统的框架层。
[0111]所述后台服务进程基于Android系统所提供的Binder机制,向System Manager注册,通过Android提供的固有的Binder机制,在后台服务进程与其监听的显示悬浮窗的流程的函数或显示服务接口之间建立C/S架构的沟通管道。具体而言,当获取到系统的Root权限后,为了便于后续实现对系统中其它进程的监听以及相关操作功能,本发明首先启动具有已经获得Root权限的由本方法实例化后得以运行而形成的安全APP主进程,通过安全APP主进程在系统中插入所述后台服务进程,例如具体可通过安全APP主进程调用函数ServiceManager.addService ()来实现插入操作,由此实现对本方法实例化程序所构造的后台服务进程的成功注册,所述后台服务进程由此成为系统底层级别的服务进程。需要注意的是,所述后台服务进程通过上述的配置,已经成为系统级别的服务进程,其权限显然高于其他用户层服务进程或应用进程的权限,因此该后台服务进程可以作为通信基础,为其他调用它的进程提供通信保障,完成系统与其他调用它的进程之间的通信连接。因此,所述的后台服务进程,具有与监听的显示悬浮窗的流程的函数或显示服务接口进行通信的能力,两者之间基于Binder机制进行通信,这种通信方式具有快速稳定的特点。
[0112]在具体实施例中,获取系统的Root权限后,安全APP进程向系统底层注册一个后台服务进程,该后台服务进程运行于系统的框架层,用于监控显示于系统桌面的悬浮窗被添加的行为,所述悬浮窗被添加的行为具体为调用显示悬浮窗的流程的函数或显示服务接口的行为,并在系统应用层设置钩子函数。
[0113]在具体实施例中,所述后台服务进程对添加所述悬浮窗的添加函数的运行入口点挂钩而监听悬浮窗的添加行为,并根据监听结果调用应用层的钩子函数执行相应的操作,所述挂钩函数为WindowManager.addView()。通常情况下,当一个应用程序需要添加悬浮窗时,先调用WindowManager这个接口,WindowManager的大部分操作都在其实现类WindowManagerImpl中实现,而可以实现创建添加悬浮窗的是WindowManagerImpl的 内部类CompatModeWrapper,该类的创建是在每个进程开始的时候,通过getApplicat1n0.getSystemService (Context.WIND0ff_SERVICE)得到,然后通过调用 addViewO 添加得到悬浮窗。需要说明的是,要获取CompatModeWrapper,首先得在应用程序的AndroidManifest.xml 文件中添加权限 uses-permiss1n android:name =,,android, permiss1n.SYSTEM_ALERT_WINDOW”/。
[0114]具体而言,当后台服务进程监听到应用程序运行至悬浮窗添加函数WindowManager.addView O入口点时发送悬浮窗被添加的事件通知,转向执行相应的钩子函数,由该钩子函数依据自身实现逻辑进一步处理,但是此处并不拦截应用程序添加悬浮窗的行为,使所添加的悬浮窗显示于系统桌面上。
[0115]当然,以上只是列出了优选的挂钩函数,也可以是悬浮窗添加过程中的任意可挂钩的操作,本领域人员应该理解相应的挂钩操作。其中,术语“钩子”涵盖了用于通过拦截在软件组件之间传递的函数调用、消息、或事件来改变或增加操作系统、应用程序、或其他软件组件的行为的技术。而处理这种被拦截的函数调用、事件或消息的代码就被称为钩子函数。钩子通常用于各种目标,包括对功能进行调试和对功能进行扩展。其示例可以包括在键盘或鼠标事件传递到应用程序之前拦截它们,或者拦截系统调用(system call)、或者系统函数行为、函数执行结果等,以监视或修改应用程序或其他组件的功能等等。本实施例即可采用钩子函数接管所述应用程序添加悬浮窗过程中任意可挂钩接口的操作。
[0116]本发明在系统的底层注册一个后台服务进程,在悬浮窗的添加函数WindowManager.addView()的运行入口点实现监控。一旦后台服务进程监测到系统中出现悬浮窗添加行为时,调用应用层的钩子函数做进一步的处理。通过后台服务进程与注入系统中的钩子函数进行交互,能够更强地掌握系统的控制权,并且及时高效地对悬浮窗添加行为做出响应,大大增强了系统的可靠性。
[0117]由此可见,本步骤中通过已经预注册到系统框架层的后台服务进程对显示悬浮窗的流程的函数或显示服务接口实施监控并形成所述事件通知,并将该事件通知发送到系统应用层,调用钩子函数做相应的处理,但是此处并不拦截应用程序添加悬浮窗的行为,使所添加的悬浮窗显示于系统桌面上。
[0118]步骤S12、显示指令接收界面以接收用户指令,将用户指令与该事件通知所提供的悬浮窗特征信息关联性存储以实施设置。
[0119]在悬浮窗显示于系统桌面,且系统应用层接收到悬浮窗被添加的事件通知后,钩子函数弹出指令接收界面,用于接收用户指令,所述用户指令可包括表征已显示的悬浮窗禁止显示的用户指令,也可以包括表征允许悬浮窗显示的用户指令。其中所述的指令接收界面的布局位置可以覆盖所显示的悬浮窗,也可以布局在系统桌面的任意位置上。所述指令接收界面可以是基于SystemUI实现的通知栏,又或者诸如Android系统的Activity组件所实现的窗口界面,或者是通过调用ActivityManager.AddviewO得到的悬浮窗界面。在具体实施例中,所述指令接收界面上显示弹出悬浮窗的提示,同时提供可选择的按钮,由用户通过选择“不再提示我”或“禁止再显示”按钮完成对该悬浮窗的显示设置。
[0120]且在安全APP接收到由后台服务进程监听而产生的显示于系统桌面的悬浮窗被添加的行为的事件通知后,根据该事件通知提取所显示悬浮窗的特征信息。并将提取的悬浮窗特征信息与指令接收界面所接收的用户指令关联性的存储为预设列表。
[0121]其中,所述悬浮窗特征信息的形式多样,具体表现为:
[0122]1、在一个实施例中,悬浮窗特征信息可以依据绘制悬浮窗的属性值而获得。在具体实施时,可以是通过后台服务进程识别出显示悬浮窗的流程的函数或显示服务接口,找到WindowManager.LayoutParams对象,解析其中有关悬浮窗属性设置的程序代码,按照一定的特征信息提取算法提取悬浮窗属性值。关于特征信息提取算法的方法,为公知技术,在此略去详述。在本步骤中,悬浮窗的属性值可以是窗口布局文件路径消息、窗口图片资源文件路径信息、窗口布局文件名称信息、窗口图片资源文件名称信息、窗口文本文字信息、窗口布局大小和位置信息中的一种或其任意组合。
[0123]2、在另一个实施例中,悬浮窗特征信息可以是监听到的所述悬浮窗被添加时处于系统最顶层的应用程序进程而确定该应用程序的包名和/或MD5签名作为所述的特征信息。这里所述的系统最顶层的应用程序进程是指运行在当前栈顶的Activity所属的应用程序进程。众所周知,Android中的进程都是通过栈来管理的,Activities的管理也不例夕卜,栈结构先进后出的特性可以很容易识别出当前处于栈顶的Activity。在具体的实施时,后台服务进程监听到悬浮窗被添加后,调用ActivityManager得到当前系统的任务栈信息,然后从任务栈中获得处于栈顶的Activity名称,再提取处于栈顶的Activity所属的应用程序进程的包名和/或MD5签名作为所述的悬浮窗特征信息,当然也不仅仅限于应用程序的包名或MD5签名信息,也可以是其它各种有助于确定该应用程序的特征的唯一性信息。提取应用程序的这些特征信息作为本实施例中悬浮窗的特征信息。
[0124]3、在又一个实施例中,所述悬浮窗特征信息可以是监听到的所述悬浮窗的添加函数的资源路径而确定悬浮窗所属应用程序的包名和/或MD5签名作为所述的特征信息。操作系统的应用程序接口 API是应用程序和操作系统通信的接口,是系统提供的公知的服务,包括了多个可调用的函数,调用相应的函数可以得到智能终端的各种信息。在具体实施时,当后台服务进程监听到悬浮窗添加行为后,访问智能终端安装的操作系统的应用程序接口 API,调用进程列表获取函数 ActivityManager.getRunningAppProcesses O,就能获得系统当前进程名称列表,当前进程名称列表中包括了系统中正在运行的所有程序的程序包名称,其中必然包括了该悬浮窗所属的应用程序包名。又由于应用程序的属性信息包括有程序名称、程序包名称、程序大小、路径、拥有的服务和申请的权限等信息。因此后台服务进程可以通过访问智能终端安装的操作系统的应用程序接口 API,调用程序属性信息获取函数ActivityManager.queryIntentActivities O,依据当前程序的包名称提取应用程序的属性,便可以根据调用了悬浮窗的添加函数ActivityManager.addViewO的路径判断出该悬浮窗所属于的应用程序。例如,还可以通过分析当前应用程序申请的权限信息,判断出哪个应用程序的AndroidManifest.xml文件中添加有权限uses-permiss1nandroid:name =”android.permiss1n.SYSTEM_ALERT_ffINDOffv,即申请有悬浮窗添加权限的应用程序即为所述悬浮窗所属的应用程序,再按照一定的特征信息提取算法提取应用程序的包名和MD5签名信息,当然也不仅仅限于应用程序的包名或MD5签名信息,也可以是其它各种有助于确定该应用程序的特征的唯一性信息。进而提取应用程序的这些特征信息作为本实施例中悬浮窗特征信息。
[0125]本发明中通过注册到系统底层的后台服务进程,与设置在系统应用层的钩子函数实现通信,来获取悬浮窗被添加时处于系统最顶层的应用程序进程或监测悬浮窗的添加函数被调用的资源路径,来判定出悬浮窗所属的应用程序,继而建立应用程序包名和/或签名与用户指令的预设列表,而且本实施例悬浮窗特征信息范围全面,既能是绘制所述悬浮窗的属性值,如窗口布局文件名称信息和路径信息、窗口图片资源文件名称信息和路径信息、窗口布局大小和位置信息等;又能是该悬浮窗所属的应用程序的包名和/或MD5签名。在具体实施时,通过范围全面的悬浮窗特征信息来查找预设列表,根据列表中预存的用户指令实现对悬浮窗的显示设置,提高了系统对悬浮窗显示设置的准确性,降低漏查和误查的几率。
[0126]本实施例中,在将提取的悬浮窗特征信息与指令接收界面所接收的用户指令以一一映射关系关联性的存储为预设列表后,所述的预设列表可以保存到本地或远程服务器中。当实施将所述预设列表保存到远程服务器中时,采用钩子函数将包含有悬浮窗特征信息和用户指令映射关系的预设列表打包生成数据包并构造一个远程上传请求,然后基于TCP/IP协议,将该上传请求通过远程接口发送至接入互联网的云端服务器。
[0127]S13、响应于表征禁止悬浮窗显示的用户指令,通知所述后台服务进程控制所述悬浮窗从系统桌面中消失。
[0128]当用户在弹出的显示指令接收界面上选定表征禁止悬浮窗显示的指令按钮后,钩子函数将用户指令通知到后台服务进程,后台服务进程继而调用ActivityManager.MoveViewO函数,移除显示在系统桌面的悬浮窗。或者后台服务进程将WindowManager.LayoutParams对象中的悬浮窗的可见属性由显示更改为不可见,从而使悬浮窗消失。当用户在弹出的显示指令接收界面上选定表征允许悬浮窗显示的指令按钮后,钩子函数向后台服务进程返回空值,即后台服务进程对显示在系统桌面的悬浮窗不做任何处理,悬浮窗继续显示在系统桌面上。
[0129]进一步的,在接收到表征禁止悬浮窗显示的用户指令后,后台服务进程或者所述钩子函数可以调用安全扫描接口对显示的悬浮窗所属的应用程序进行安全扫描,防止一些显示悬浮窗的应用程序会存在其他恶意行为或携带木马病毒,损害用户的利益;或者直接卸载掉该应用程序,主要是对于一些非用户自愿安装或误装的恶意应用程序进行卸载处理;也可以设置该应用程序的隐私访问权限,针对部分应用程序会存在侵犯用户隐私的行为,可禁止该应用程序访问用户的通讯录和通话记录的权限、获取用户上网记录的权限等。对悬浮窗所属的应用程序进一步的防范处理可提高系统的安全性。
[0130]本实施例所述的方法,还进一步包括有当再次接收到由系统底层的后台服务进程监听到的先前显示过的悬浮窗后续产生的又被添加的行为的事件通知,先提取该悬浮窗特征信息,所述悬浮窗特征信息包括前述的绘制悬浮窗的属性值或该悬浮窗所属的应用程序的包名或签名信息,具体的原理和提取方法在此不再赘述。
[0131]然后,通过钩子函数根据该特征信息查找预先存储在本地或远程服务器中包含悬浮窗特征信息与其对应的用户指令的映射关系的预设列表,提取出与该悬浮窗特征信息对应的用户指令。在查找存储在云端远程服务器中的预设列表时,钩子函数先构造基于提取的悬浮窗特征信息的一个远程请求,基于TCP/IP协议,将该请求通过远程接口发送至接入互联网的云端服务器,云端服务器将接收到的悬浮窗特征信息与预设列表中的数据信息进行对比,查找出与该悬浮窗特征信息映射的用户指令,基于TCP/IP协议通过远程接口将用户指令信息反馈给智能终端。
[0132]智能终端接收到的用户指令信息表征禁止该悬浮窗再次显示时,通知后台服务进程直接拦截悬浮窗被添加的行为,禁止其再次显示;当预先设置的用户指令表征允许该悬浮窗再次显示时,通知后台服务进程放行悬浮窗被添加的行为,让悬浮窗显示在系统桌面。
[0133]本发明结合云端技术实现,通过发送包含所述悬浮窗特征信息的远程请求并接收远程服务器反馈的数据获得相应的用户指令,由于远程服务器中的数据更全面科学,使得得到的用户指令也更加科学精确,具有普遍适应性,从而可以避免造成误判,进一步提高系统可靠性。
[0134]进一步,依据计算机软件的功能模块化思维,本发明提供一种悬浮窗显示设置装置,请参阅图2,该装置包括通知接收模块11、指令接收模块12和处理模块13,利用该通知接收模块11、指令接收模块12和处理模块13来搭建起整个装置的原理框架,从而实现模块化实施方案。
[0135]所述的通知接收模块11,用于接收由注册到系统底层的后台服务进程监听而产生的显示于系统桌面的悬浮窗被添加的行为的事件通知。
[0136]本实施例所述的通知接收模块11所注册的后台服务进程,是指由以本方法所实现的一个程序模块,运行于内存中,通过内存中的相应安全APP主进程实现如前所述的提权操作后,向系统注册的一个通信服务进程。总所周知,Zygote进程孵化了所有的Android应用进程,是Android框架层的基础,该进程的启动标志着系统框架初始化启动的开始。Zygote fork出一个新的进程,即SystemServer进程。本发明所述的后台服务进程也由SystemServer启动,预先向System Manager注册一个后台服务进程,使该后台服务进程运行于系统的框架层。
[0137]所述的通知接收模块11被配置为通过识别用于显示悬浮窗的流程的函数或显示服务接口而实现所述对悬浮窗行为的监听。所述通知接收模块11基于Android系统所提供的Binder机制,向System Manager注册后台服务进程,通过Android提供的固有的Binder机制,在后台服务进程与其由通知接收模块11所监听的显示悬浮窗的流程的函数或显示服务接口之间建立C/S架构的沟通管道。具体而言,当获取到系统的Root权限后,为了便于通知接收模块11后续实现对系统中其它进程的监听以及相关操作功能,本发明首先启动具有已经获得Root权限的由本装置实例化后得以运行而形成的安全APP主进程,通过安全APP主进程在系统中插入所述后台服务进程,例如由通知接收模块11通过安全APP主进程调用函数ServiceManager.addService ()来实现插入操作,由此实现对本装置实例化程序所构造的后台服务进程的成功注册,所述后台服务进程由此成为系统底层级别的服务进程。需要注意的是,所述后台服务进程通过上述的配置,已经成为系统级别的服务进程,其权限显然高于其他用户层服务进程或应用进程的权限,因此该后台服务进程可以作为通信基础,为其他调用它的进程提供通信保障,完成系统与其他调用它的进程之间的通信连接。因此,所述的后台服务进程,具有与其所监听的显示悬浮窗的流程的函数或显示服务接口进行通信的能力,两者之间基于Binder机制进行通信,这种通信方式具有快速稳定的特点。
[0138]在具体实施例中,获取系统的Root权限后,安全APP程序向系统底层注册一个后台服务进程,该后台服务进程运行于系统的框架层,用于监控显示于系统桌面的悬浮窗被添加的行为,所述悬浮窗被添加的行为具体为调用显示悬浮窗的流程的函数或显示服务接口的行为,并在系统应用层设置钩子函数。
[0139]在具体实施时,通知接收模块11通知后台服务进程对添加所述悬浮窗的添加函数的运行入口点挂钩而监听悬浮窗的添加行为,根据监听结果调用应用层的钩子函数执行相应操作,所述挂钩函数是WindowManager.addView()。通常情况下,当一个应用程序需要添加悬浮窗时, 先调用WindowManager这个接口,WindowManager的大部分操作都在其实现类WindowManagerImpl中实现,而可以实现创建添加悬浮窗的是WindowManagerImpl的内部类CompatModeWrapper,该类的创建是在每个进程开始的时候,通过getApplicat1n0.getSystemService (Context.WIND0ff_SERVICE)得到,然后通过调用 addViewO 添加得到悬浮窗。需要说明的是,要获取CompatModeWrapper,首先得在应用程序的AndroidManifest.xml 文件中添加权限 uses-permiss1n android:name =,,android, permiss1n.SYSTEM_ALERT_WINDOW”/。
[0140]具体而言,当通知接收模块11通过后台服务进程监听到应用程序运行至悬浮窗添加函数WindowManager.addView O入口点时,通知接收模块11通知后台服务进程转向执行应用层的钩子函数,由该钩子函数依据自身实现逻辑执行相应的操作,但是此处并不拦截应用程序添加悬浮窗的行为,而是使所添加的悬浮窗显示于系统桌面上。
[0141]当然,以上只是列出了优选的挂钩函数,也可以是悬浮窗添加过程中的任意可挂钩的操作,本领域人员应该理解相应的挂钩操作。其中,术语“钩子”涵盖了用于通过拦截在软件组件之间传递的函数调用、消息、或事件来改变或增加操作系统、应用程序、或其他软件组件的行为的技术。而处理这种被拦截的函数调用、事件或消息的代码就被称为钩子函数。钩子通常用于各种目标,包括对功能进行调试和对功能进行扩展。其示例可以包括在键盘或鼠标事件传递到应用程序之前拦截它们,或者拦截系统调用(system call)、或者系统函数行为、函数执行结果等,以监视或修改应用程序或其他组件的功能等等。本实施例即可采用钩子函数接管所述应用程序添加悬浮窗过程中任意可挂钩接口的操作。
[0142]本发明通过在系统的底层注册一个后台服务进程,在悬浮窗的添加函数WindowManager.addView()的运行入口点挂钩钩子函数。一旦通知接收模块11接收到后台服务进程发出的出现悬浮窗添加行为的事件通知后,根据该事件通知后台服务进程调用应用层的钩子函数执行相应的操作。通过后台服务进程与注入系统中的钩子函数进行交互,能够更强地掌握系统的控制权,并且及时高效地对悬浮窗添加行为做出响应,大大增强了系统的可靠性。
[0143]由此可见,通过注册到系统框架层的后台服务进程对显示悬浮窗的流程的函数或显示服务接口实施监控,并将悬浮窗添加事件发送到系统应用层,但是此处并不拦截应用程序添加悬浮窗的行为,使所添加的悬浮窗显示于系统桌面上。
[0144]指令接收模块12,用于显示指令接收界面以接收用户指令,将用户指令与该事件通知所提供的悬浮窗特征信息关联性存储以实施设置。
[0145]在悬浮窗显示于系统桌面,且通知接收模块11接收到悬浮窗被添加的事件通知后,指令接收模块12通过钩子函数弹出指令接收界面,用于接收用户指令,所述指令可包括表征已显示的悬浮窗禁止显示的用户指令,也可以包括表征允许悬浮窗显示的用户指令。其中所述的指令接收界面的布局位置可以覆盖所显示的悬浮窗,也可以布局在系统桌面的任意位置上。所述指令接收界面可以是基于SystemUI实现的通知栏,又或者诸如Android系统的Activity组件所实现的窗口界面,或者是通过调用ActivityManager.AddviewO得到的悬浮窗界面。在具体实施例中,所述指令接收模块12在指令接收界面上显示弹出悬浮窗的提示,同时提供可选择的按钮,由用户通过选择“不再提示我”或“禁止再显示”按钮完成对该悬浮窗的显示设置。
[0146]且在通知接收模块11接收到由后台服务进程监听而产生的显示于系统桌面的悬浮窗被添加的行为的事件通知后,指令接收模块12中的预设单元120根据该事件通知提取所显示悬浮窗的特征信息。并将预设单元120提取的悬浮窗特征信息与指令接收模块12所显示的指令接收界面所接收的用户指令关联性的存储为预设列表。
[0147]其中,所述悬浮窗特征信息的形式多样,具体表现为:
[0148]1、在一个实施例中,预设单元120得到的悬浮窗特征信息可以依据绘制悬浮窗的属性值而获得。在具体实施时,可以是通过预设单元120控制后台服务进程识别出显示悬浮窗的流程的函数或显示服务接口,找到WindowManager.LayoutParams对象,解析其中有关悬浮窗属性设置的程序代码,按照一定的特征信息提取算法提取悬浮窗属性值。关于特征信息提取算法的方法,为公知技术,在此略去详述。在本步骤中,悬浮窗的属性值可以是窗口布局文件路径消息、窗口图片资源文件路径信息、窗口布局文件名称信息、窗口图片资源文件名称信息、窗口文本文字信息、窗口布局大小和位置信息中的一种或其任意组合。
[0149]2、在另一个实施例中,悬浮窗特征信息可以是监听到的所述悬浮窗被添加时处于系统最顶层的应用程序进程而确定该应用程序的包名和/或MD5签名作为所述的特征信息。这里所述的系统最顶层的应用程序进程是指运行在当前栈顶的Activity所属的应用程序进程。众所周知,Android中的进程都是通过栈来管理的,Activities的管理也不例外,栈结构先进后出的特性可以很容易识别出当前处于栈顶的Activity。在具体的实施时,当后台服务进程监听到悬浮窗被添加后,预设单元120通知后台服务进程调用ActivityManager中得到当前系统的任务栈信息,然后从任务栈中获得处于栈顶的Activity名称,再提取处于栈顶的Activity所属的应用程序进程的包名和/或MD5签名作为所述的悬浮窗特征信息,当然也不仅仅限于应用程序的包名或MD5签名信息,也可以是其它各种有助于确定该应用程序的特征的唯一性信息。预设单元120提取应用程序的这些特征信息作为本实施例中悬浮窗的特征信息。
[0150]3、在又一个实施例中,所述悬浮窗特征信息可以是监听到的所述悬浮窗的添加函数的资源路径而确定悬浮窗所属应用程序的包名和/或MD5签名作为所述的特征信息。操作系统的应用程序接口 API是应用程序和操作系统通信的接口,是系统提供的公知的服务,包括了多个可调用的函数,调用相应的函数可以得到智能终端的各种信息。在具体实施时,当后台服务进程监听到悬浮窗添加行为后,预设单元120通过后台服务进程访问智能终端安装的操作系统的应用程序接口 API,通过调用进程列表获取函数ActivityManager.getRunningAppProcesses O,就能获得系统当前进程名称列表,当前进程名称列表中包括了系统中正在运行的所有程序的程序包名称,其中必然包括了该悬浮窗所属的应用程序包名。又由于应用程序的属性信息包括有程序名称、程序包名称、程序大小、路径、拥有的服务和申请的权限等信息。因此预设单元120可以通过后台服务进程访问智能终端安装的操作系统的应用程序接口 API,再调用程序属性信息获取函数ActivityManager.querylntentActivities O ,依据当前程序的包名称提取应用程序的属性,便可以根据调用了悬浮窗的添加函数ActivityManager.addView O的路径判断出该悬浮窗所属于的应用程序。例如,预设单元120还可以通过分析当前应用程序申请的权限信息,判断出哪个应用程序的 AndroidManifest.xml 文件中添加有权限 uses-permiss1n android:name=” android, permiss1n.SYSTEM_ALERT_WINDOW”,即申请有悬浮窗添加权限的应用程序即为所述悬浮窗所属的应用程序,所述预设单元120再按照一定的特征信息提取算法提取应用程序的包名和MD5签名信息,当然也不仅仅限于应用程序的包名或MD5签名信息,也可以是其它各种有助于确定该应用程序的特征的唯一性信息。进而预设单元120提取应用程序的这些特征信息作为本实施例中悬浮窗特征信息。
[0151]本发明中通过注册到系统底层的后台服务进程,与设置在系统应用层的钩子函数实现通信,采用预设单元120获取悬浮窗被添加时处于系统最顶层的应用程序进程或监测悬浮窗的添加函数被调用的资源路径,来判定出悬浮窗所属的应用程序,继而建立应用程序包名和/或签名与用户指令的预设列表,当后台服务进程再次监听到该应用程序添加悬浮窗时,可直接采用应用程序包名和/或签名查找预设表格中对应的用户指令来设置和控制悬浮窗的显示。当用户每次运行该应用程序时,都能按照预先设置的用户指令控制所述悬浮窗的显示,进一步提高了悬浮窗的拦截效率。
[0152]由此可见,本发明装置将用户指令与该预设单元120所提取的悬浮窗特征信息关联性存储为预设列表,其中悬浮窗特征信息范围全面,既能是绘制所述悬浮窗的属性值,如窗口布局文件名称信息和路径信息、窗口图片资源文件名称信息和路径信息、窗口布局大小和位置信息等;又能是该悬浮窗所属的应用程序的包名和/或MD5签名。在具体实施时,通过范围全面的悬浮窗特征信息来查找预设列表,根据列表中预存的用户指令实现对悬浮窗的显示设置和控制,提高了系统对悬浮窗显示设置和控制的准确性,降低漏查和误查的几率。
[0153]本实施例中,在将预设单元120提取的悬浮窗特征信息与指令接收模块12显示的指令接收界面所接收的用户指令以一一映射关系关联性的存储为预设列表后,所述的预设列表可以保存到本地或远程服务器中。当实施将所述预设列表保存到远程服务器中时,指令接收模块12控制钩子函数将包含有悬浮窗特征信息和用户指令映射关系的预设列表打包生成数据包并构造一个远程上传请求,然后基于TCP/IP协议,将该上传请求通过远程接口发送至接入互联网的云端服务器。
[0154]处理模块13,用于响应于表征禁止悬浮窗显示的用户指令,通知所述后台服务进程控制所述悬浮窗从系统桌面中消失。
[0155]当用户在指令接收模块12弹出的显示指令接收界面上选定表征禁止悬浮窗显示的指令按钮后,钩子函数将用户指令通知给后台服务进程,继而处理模块13通过后台服务进程调用ActivityManager.MoveViewO函数,移除显示在系统桌面的悬浮窗。或者处理模块13通过后台服务进程将WindowManager.LayoutParams对象中悬浮窗的可见属性由显不更改为不可见,从而使悬浮窗消失。当用户在指令接收模块12弹出的显示指令接收界面上选定表征允许悬浮窗显示的指令按钮后,处理模块13通知钩子函数向后台服务进程返回空值,即后台服务进程对显示在系统桌面的悬浮窗不做任何处理,悬浮窗继续显示在系统桌面上。
[0156]进一步的,在接收到表征禁止悬浮窗显示的用户指令后,处理模块13通过后台服务进程或钩子函数调用安全扫描接口对显示的悬浮窗所属的应用程序进行安全扫描,防止一些显示悬浮窗的应用程序会存在其他恶意行为或携带木马病毒,损害用户的利益;或者处理模块13直接卸载掉该应用程序,主要是对于一些非用户自愿安装或误装的恶意应用程序进行卸载处理;也可以通过处理模块13设置该应用程序的隐私访问权限,针对部分应用程序会存在侵犯用户隐私的行为,处理模块13可禁止该应用程序访问用户的通讯录和通话记录的权限、获取用户上网记录的权限等。对悬浮窗所属的应用程序进一步的防范处理可提尚系统的安全性。
[0157]本实施例所述的方法,还进一步包括有当通知接收模块11再次接收到由系统底层的后台服务进程监听到先前显示过的悬浮窗后续产生的又被添加的行为的事件通知,通过预设单元120提取该悬浮窗特征信息,所述悬浮窗特征信息包括前述的绘制悬浮窗的属性值或该悬浮窗所属的应用程序的包名或签名信息,具体的原理和提取方法在此不再赘述。
[0158]然后,指令接收模块12通知钩子函数根据该特征信息查找预先存储在本地或远程服务器中包含悬浮窗特征信息与其对应的用户指令的映射关系的预设列表,提取出与该悬浮窗特征信息对应的用户指令。在查找存储在云端远程服务器中的预设列表时,指令接收模块12通过钩子函数先构造基于提取的悬浮窗特征信息的一个远程请求,基于TCP/IP协议,将该请求通过远程接口发送至接入互联网的云端服务器,云端服务器将接收到的悬浮窗特征信息与预设列表中的数据信息进行对比,查找出与该悬浮窗特征信息映射的用户指令,基于TCP/IP协议通过远程接口将用户指令信息反馈给智能终端。
[0159]智能终端接收到的用户指令信息表征禁止该悬浮窗再次显示时,处理模块13通知后台服务进程直接拦截悬浮窗被添加的行为,禁止其再次显示;当预先设置的用户指令表征允许该悬浮窗再次显示时,处理模块13通知后台服务进程放行悬浮窗被添加的行为,让悬浮窗显示在系统桌面。
[0160]本发明结合云端技术实现,通过发送包含所述悬浮窗特征信息的远程请求并接收远程服务器反馈的数据获得相应的用户指令,由于远程服务器中的数据更全面科学,使得得到的用户指令也更加科学精确,具有普遍适应性,从而可以避免造成误判,进一步提高系统可靠性。
[0161]为了进一步说明本发明的【具体实施方式】,本发明还提出了一种悬浮窗显示控制方法,实际上所述方法二中悬浮窗显示控制方法与前述提到的方法一中悬浮窗设置方法属于本发明的一体两面,所述方法一和方法二实际上可依据一定逻辑关系存在于同一个实施例中。
[0162]下面结合附图3详述本发明方法二所提供的一种悬浮窗显示控制方法,具体包括:
[0163]S21、接收由注册到系统底层的后台服务进程截获悬浮窗添加行为而产生的事件通知。
[0164]按照前一方法的一个实施例所揭示,本实施例所述的后台服务进程,是指由以本方法所实现的一个程序模块,运行于内存中,通过内存中的相应安全APP主进程实现如前所述的提权操作后,向系统注册的一个通信服务进程。所述后台服务进程基于Android系统所提供的Binder机制,向System Manager注册,通过Android提供的固有的Binder机制,在后台服务进程与其拦截的显示悬浮窗的流程的函数或显示服务接口之间建立C/S架构的沟通管道。例如具体可通过系统调用函数ServiceManager.addServiceO来实现插入操作,由此实现对本方法实例化程序所构造的后台服务进程的成功注册,所述后台服务进程由此成为系统底层级别的服务进程。在具体实施例中,获取系统的Root权限后,安全APP进程向系统底层注册一个后台服务进程,该后台服务进程运行于系统的框架层,用于监控显示于系统桌面的悬浮窗被添加的行为,所述悬浮窗被添加的行为具体为调用显示悬浮窗的流程的函数或显示服务接口的行为,通过后台服务进程拦截该函数或接口来实现对悬浮窗添加行为的截获,并在系统应用层注入钩子函数。
[0165]在具体实施例中,所述后台服务进程对添加所述悬浮窗的添加函数的运行入口点挂钩而监听悬浮窗的添加行为,调用应用层的钩子函数执行相应的操作,后台服务进程并实施对该行为的拦截,所述挂钩 函数为WindowManager.addView()。通常情况下,当一个应用程序需要添加悬浮窗时,先调用WindowManager这个接口,WindowManager的大部分操作都在其实现类WindowManagerImpl中实现,而可以实现创建添加悬浮窗的是WindowManagerImpl的内部类CompatModeWrapper,该类的创建是在每个进程开始的时候,通过 getApplicat1n 0.getSystemService (Context.WIND0ff_SERVICE)得到,然后通过调用addViewO添加得到悬浮窗。需要说明的是,要获取CompatModeWrapper,首先得在应用程序的 AndroidManifest.xml 文件中添加权限 uses-permiss1n android:name=,,android, permiss1n.SYSTEM_ALERT_WINDOW” I。
[0166]具体而言,当后台服务进程监听到应用程序运行至悬浮窗添加函数WindowManager.addView O入口点时,转向执行相应的钩子函数,由该钩子函数依据自身实现逻辑执行相应的操作,并在此处拦截应用程序添加悬浮窗的行为。当然,以上只是列出了优选的挂钩函数,也可以是悬浮窗添加过程中的任意可挂钩的操作,本领域人员应该理解相应的挂钩操作。通过后台服务进程与注入系统中的以钩子函数形式实现的监听器进行交互,能够更强地掌握系统的控制权,并且及时高效地对悬浮窗添加行为做出响应,大大增强了系统的可靠性。
[0167]由此可见,通过已经预注册到系统框架层的后台服务进程对悬浮窗的添加行为进行监控并形成所述的事件通知,并将该添加事件通知发送到系统应用层,同时拦截应用程序添加悬浮窗的行为。
[0168]S22、以所述事件通知所提供的悬浮窗特征信息查询预设列表以从中确定与之相对应的用户指令。
[0169]在接收到由后台服务进程拦截悬浮窗被添加的行为的事件通知后,根据该事件通知提取该悬浮窗的悬浮窗特征信息。并按照所提取的悬浮窗特征信息查询预先形成的预设列表,所述预设列表是指悬浮窗特征信息与相应的用户指令之间的映射关系数据。
[0170]所述预设列表具体实现过程按照前述方法一中一个实施例所揭示的,在接收到由后台服务进程拦截的悬浮窗被添加的行为的事件通知后,通知钩子函数弹出指令接收界面以接收用户指令,所述指令可包括表征悬浮窗禁止显示的用户指令,也可以包括表征允许悬浮窗显示的用户指令。在具体实施时,所述指令接收界面上显示弹出悬浮窗的提示,同时提供可选择的按钮,由用户通过选择“不再提示我”或“禁止再显示”按钮完成对该悬浮窗的显示设置。且在接收到悬浮窗被添加的行为的事件通知后,根据该事件通知提取该悬浮窗的悬浮窗特征信息,然后将用户指令与该事件通知所提供的悬浮窗特征信息关联性存储为预设列表。
[0171]其中,所述悬浮窗特征信息的形式多样,具体表现为:
[0172]1、在一个实施例中,悬浮窗特征信息可以依据绘制悬浮窗的属性值而获得。在具体实施时,可以是通过后台服务进程识别出显示悬浮窗的流程的函数或显示服务接口,找到WindowManager.LayoutParams对象,解析其中有关悬浮窗属性设置的程序代码,按照一定的特征信息提取算法提取悬浮窗属性值。关于特征信息提取算法的方法,为公知技术,在此略去详述。在本步骤中,悬浮窗的属性值可以是窗口布局文件路径消息、窗口图片资源文件路径信息、窗口布局文件名称信息、窗口图片资源文件名称信息、窗口文本文字信息、窗口布局大小和位置信息中的一种或其任意组合。
[0173]2、在另一个实施例中,悬浮窗特征信息可以是监听到的所述悬浮窗被添加时处于系统最顶层的应用程序进程而确定该应用程序的包名和/或MD5签名作为所述的特征信息。这里所述的系统最顶层的应用程序进程是指运行在当前栈顶的Activity所属的应用程序进程。众所周知,Android中的进程都是通过栈来管理的,Activities的管理也不例夕卜,栈结构先进后出的特性可以很容易识别出当前处于栈顶的Activity。在具体的实施时,后台服务进程监听到悬浮窗被添加后,调用ActivityManager中得到当前系统的任务栈信息,然后从任务栈中获得处于栈顶的Activity名称,再提取处于栈顶的Activity所属的应用程序进程的包名和/或MD5签名作为所述的悬浮窗特征信息,当然也不仅仅限于应用程序的包名或MD5签名信息,也可以是其它各种有助于确定该应用程序的特征的唯一性信息。提取应用程序的这些特征信息作为本实施例中悬浮窗的特征信息。
[0174]3、在又一个实施例中,所述悬浮窗特征信息可以是监听到的所述悬浮窗的添加函数的资源路径而确定悬浮窗所属应用程序的包名和/或MD5签名作为所述的特征信息。操作系统的应用程序接口 API是应用程序和操作系统通信的接口,是系统提供的公知的服务,包括了多个可调用的函数,调用相应的函数可以得到智能终端的各种信息。在具体实施时,当后台服务进程监听到悬浮窗添加行为后,访问智能终端安装的操作系统的应用程序接口 API,调用进程列表获取函数 ActivityManager.getRunningAppProcesses O,就能获得系统当前进程名称列表,当前进程名称列表中包括了系统中正在运行的所有程序的程序包名称,其中必然包括了该悬浮窗所属的应用程序包名。又由于应用程序的属性信息包括有程序名称、程序包名称、程序大小、路径、拥有的服务和申请的权限等信息。因此后台服务进程可以通过访问智能终端安装的操作系统的应用程序接口 API,调用程序属性信息获取函数ActivityManager.querylntentActivities O,依据当前程序的包名称提取应用程序的属性,便可以根据调用了悬浮窗的添加函数ActivityManager.addViewO的路径判断出该悬浮窗所属于的应用程序。例如,还可以通过分析当前应用程序申请的权限信息,判断出哪个应用程序的AndroidManifest.xml文件中添加有权限uses-permiss1nandroid:name =”android.permiss1n.SYSTEM_ALERT_ffINDOffv,即申请有悬浮窗添加权限的应用程序即为所述悬浮窗所属的应用程序,再按照一定的特征信息提取算法提取应用程序的包名和MD5签名信息,当然也不仅仅限于应用程序的包名或MD5签名信息,也可以是其它各种有助于确定该应用程序的特征的唯一性信息。进而提取应用程序的这些特征信息作为本实施例中悬浮窗特征信息。
[0175]本发明中通过注册到系统底层的后台服务进程,与设置在系统应用层的钩子函数实现通信,获取悬浮窗被添加时处于系统最顶层的应用程序进程或监测悬浮窗的添加函数被调用的资源路径,来判定出悬浮窗所属的应用程序,直接采用应用程序包名和/或签名查找预先设置好的预设表格中对应的用户指令来控制悬浮窗的显示。当用户每次运行该应用程序时,都能按照预先设置的用户指令控制所述悬浮窗的显示,进一步提高了悬浮窗的拦截效率。
[0176]而且,本发明方法将用户指令与该添加事件通知所提供的悬浮窗特征信息关联性存储为预设列表,其中悬浮窗特征信息范围全面,既能是绘制所述悬浮窗的属性值,如窗口布局文件名称信息和路径信息、窗口图片资源文件名称信息和路径信息、窗口布局大小和位置信息等;又能是该悬浮窗所属的应用程序的包名和/或MD5签名。在具体实施时,通过范围全面的悬浮窗特征信息来查找预设列表,根据列表中预存的用户指令实现对悬浮窗的显示控制,提高了系统对悬浮窗控制的准确性,降低漏查和误查的几率。
[0177]本实施例中,在将提取的悬浮窗特征信息与指令接收界面所接收的用户指令以一一映射关系关联性的存储为预设列表后,所述的预设列表被存储在远程服务器中。在查找存储在云端远程服务器中的预设列表时,通过钩子函数先构造基于提取的悬浮窗特征信息的一个远程请求,基于TCP/IP协议,将该请求通过远程接口发送至接入互联网的云端服务器,云端服务器将接收到的悬浮窗特征信息与预设列表中的数据信息进行对比,查找出与该悬浮窗特征信息映射的用户指令,基于TCP/IP协议通过远程接口将用户指令反馈给智能终端。
[0178]本发明结合云端技术实现,通过发送包含所述悬浮窗特征信息的远程请求并接收远程服务器反馈的数据获得相应的用户指令,由于远程服务器中的数据更全面科学,使得得到的用户指令也更加科学精确,具有普遍适应性,从而可以避免造成误判,进一步提高系统可靠性。
[0179]S23、响应于其中表征允许或禁止悬浮窗显示的用户指令,通知后台服务进程放行或拦截该悬浮窗的显示行为。
[0180]智能终端接收到的用户指令信息表征禁止该悬浮窗显示时,由钩子函数将该用户指令通知到后台服务进程,通知后台服务进程继而直接拦截悬浮窗被添加的行为,禁止其再次显示。在具体实施时,通知后台服务进程调用ActivityManager.MoveViewO函数,移除准备添加在系统桌面上的悬浮窗;或者后台服务进程将设置在WindowManager.LayoutParams对象中的悬浮窗的可见属性设置为不可见,从而使悬浮窗消失;或者在执行悬浮窗添加的程序中时,直接绕过所述悬浮窗添加的指令;还可以自定义内容为空的钩子函数指令来替换掉悬浮窗添加程序中悬浮窗添加的指令,使得原悬浮窗添加程序运行时跳过而不执行悬浮窗添加的指令,从而实现对悬浮窗的显示拦截。
[0181]当智能终端接收到的用户指令表征允许该悬浮窗显示时,通知后台服务进程直接放行被拦截的悬浮窗的添加函数的运行入口点或显示服务接口,具体的做法是可以设置钩子函数向后台服务进程返回空值,即后台服务进程对原悬浮窗添加程序不做任何处理,使该悬浮窗显示在系统桌面上。
[0182]同理,依据计算机软件的功能模块化思维,本发明提供一种悬浮窗显示控制装置,请参阅图4。所述悬浮窗显示控制装置包括有通知接收模块21、查询模块22和控制模块23ο
[0183]具体的,所述通知接收模块21,用于接收由注册到系统底层的后台服务进程截获悬浮窗添加行为而产生的事件通知。
[0184]按照前一方法的一个实施例所揭示,本实施例所述的后台服务进程,是指由以本装置所实现的一个程序模块,运行于内存中,通过内存中的相应安全APP主进程实现如前所述的提权操作后,向系统注册的一个通信服务进程。所述后台服务进程基于Android系统所提供的Binder机制,向System Manager注册,通过Android提供的固有的Binder机制,在后台服务进程与其拦截的显示悬浮窗的流程的函数或显示服务接口之间建立C/S架构的沟通管道。例如具体可通过安全APP主进程调用函数ServiceManager.addService ()来实现插入操作,由此实现对本装置实例化程序所构造的后台服务进程的成功注册,所述后台服务进程由此成为系统底层级别的服务进程。在具体实施例中,获取系统的Root权限后,安全APP进程向系统底层注册一个后台服务进程,该后台服务进程运行于系统的框架层,用于执行监听悬浮窗的添加行为,所述悬浮窗被添加的行为具体表现为调用显示悬浮窗的流程的函数或显示服务接口的行为,并在系统应用层注入钩子函数。
[0185]在具体实施例中,所述通知接收模块21控制后台服务进程对添加所述悬浮窗的添加函数的运行入口点挂钩而监听悬浮窗的添加行为,并根据监听结果调用钩子函数执行相应的操作,且后台服务进程实施对该行为的拦截,所述挂钩函数为WindowManager.addView O。通常情况下,当一个应用程序需要添加悬浮窗时,先调用WindowManager这个接口,WindowManager的大部分操作都在其实现类WindowManagerImpl中实现,而可以实现创建添加悬浮窗的是WindowManagerImpl的内部类CompatModeWrapper,该类的创建是在每个进程开始的时候,通getApplicat1n 0.getSystemService (Context.WIND0ff_SERVICE)得到,然后通过调用addViewO添加得到悬浮窗。需要说明的是,要获取CompatModeWrapper,首先得在应用程序AndroidManifest.xml文件中添加权限uses-permiss1n android:name =,y android, permiss1n.SYSTEM_ALERT_WIND0W,,。
[0186]具体而言,当后台服务进程监听到应用程序运行至悬浮窗添加函数WindowManager.addView O入口点时,转向调用应用层的钩子函数,由该钩子函数依据自身实现逻辑执行相应操作,并在此处通知接收模块21控制后台服务进程拦截应用程序添加悬浮窗的行为。当然,以上只是列出了优选的挂钩函数,也可以是悬浮窗添加过程中的任意可挂钩的操作,本领域人员应该理解相应的挂钩操作。通过后台服务进程与注入系统中的以钩子函数形式实现的监听器进行交互,能够更强地掌握系统的控制权,并且及时高效地对悬浮窗添加行为做出响应,大大增强了系统的可靠性。
[0187]由此可见,通过已经注册到系统框架层的后台服务进程对悬浮窗的添加行为进行监控形成所述的事件通知,并将该事件通知发送到系统应用层,同时拦截应用程序添加悬浮窗的行为。
[0188]查询模块22,用于以所述事件通知所提供的悬浮窗特征信息查询预设列表以从中确定与之相对应的用户指令。
[0189]在通知接收模块21接收到由后台服务进程拦截悬浮窗被添加的行为的事件通知后,查询模块22中的设置单元220被配置为根据该事件通知提取该悬浮窗的悬浮窗特征信息。查询模块22通知钩子函数按照设置单元220所提取的悬浮窗特征信息查询预先形成的预设列表,所述预设列表是指悬浮窗特征信息与相应的用户指令之间的映射关系数据。
[0190]所述预设列表具体实现过程按照前述方法一中一个实施例所揭示的,在接收到由后台服务进程监听到悬浮窗被添加的行为的事件通知后,通知钩子函数弹出指令接收界面以接收用户指令,所述指令可包括表征悬浮窗禁止显示的用户指令,也可以包括表征允许悬浮窗显示的用户指令。在具体实施时,所述指令接收界面上显示弹出悬浮窗的提示,同时提供可选择的按钮,由用户通过选择“不再提示我”或“禁止再显示”按钮完成对该悬浮窗的显示设置。且在接收到悬浮窗被添加的行为的事件通知后,根据该事件通知提取该悬浮窗的悬浮窗特征信息,然后将用户指令与该事件通知所提供的悬浮窗特征信息关联性存储为预设列表。
[0191]其中,所述悬浮窗特征信息的形式多样,具体表现为:
[0192]1、在一个实施例中,设置单元220得到悬浮窗特征信息可以依据绘制悬浮窗的属性值而获得。在具体实施时,可以是通过后台服务进程识别出显示悬浮窗的流程的函数或显不服务接口,找到WindowManager.LayoutParams对象,解析其中有关悬浮窗属性设置的程序代码,按照一定的特征信息提取算法提取悬浮窗属性值。关 于特征信息提取算法的方法,为公知技术,在此略去详述。在本步骤中,悬浮窗的属性值可以是窗口布局文件路径消息、窗口图片资源文件路径信息、窗口布局文件名称信息、窗口图片资源文件名称信息、窗口文本文字信息、窗口布局大小和位置信息中的一种或其任意组合。
[0193]2、在另一个实施例中,悬浮窗特征信息可以是监听到的所述悬浮窗被添加时处于系统最顶层的应用程序进程而确定该应用程序的包名和/或MD5签名作为所述的特征信息。这里所述的系统最顶层的应用程序进程是指运行在当前栈顶的Activity所属的应用程序进程。众所周知,Android中的进程都是通过栈来管理的,Activities的管理也不例外,栈结构先进后出的特性可以很容易识别出当前处于栈顶的Activity。在具体的实施时,后台服务进程监听到悬浮窗被添加后,设置单元220通过后台服务进程调用ActivityManager得到当前系统的任务栈信息,然后从任务栈中获得处于栈顶的Activity名称,再提取处于栈顶的Activity所属的应用程序进程的包名和/或MD5签名作为所述的悬浮窗特征信息,当然也不仅仅限于应用程序的包名或MD5签名信息,也可以是其它各种有助于确定该应用程序的特征的唯一性信息。设置单元220提取应用程序的这些特征信息作为本实施例中悬浮窗的特征信息。
[0194]3、在又一个实施例中,所述悬浮窗特征信息可以是监听到的所述悬浮窗的添加函数的资源路径而确定悬浮窗所属应用程序的包名和/或MD5签名作为所述的特征信息。操作系统的应用程序接口 API是应用程序和操作系统通信的接口,是系统提供的公知的服务,包括了多个可调用的函数,调用相应的函数可以得到智能终端的各种信息。在具体实施时,当后台服务进程监听到悬浮窗添加行为后,设置单元220通过后台服务进程访问智能终端安装的操作系统的应用程序接口 API,调用进程列表获取函数ActivityManager.getRunningAppProcesses O,就能获得系统当前进程名称列表,当前进程名称列表中包括了系统中正在运行的所有程序的程序包名称,其中必然包括了该悬浮窗所属的应用程序包名。又由于应用程序的属性信息包括有程序名称、程序包名称、程序大小、路径、拥有的服务和申请的权限等信息。因此设置单元220通知后台服务进程访问智能终端安装的操作系统的应用程序接口 API,调用程序属性信息获取函数Act iVi tyManager.querylntentActivities O,依据当前程序的包名称提取应用程序的属性,便可以根据调用了悬浮窗的添加函数ActivityManager.addView O的路径判断出该悬浮窗所属于的应用程序。例如,还可以通过设置单元220分析当前应用程序申请的权限信息,判断出哪个应用程序的 AndroidManifest.xml 文件中添加有权限 uses-permiss1n android:name=”android, permiss1n.SYSTEM_ALERT_WINDOW”,即申请有悬浮窗添加权限的应用程序即为所述悬浮窗所属的应用程序,再按照一定的特征信息提取算法提取应用程序的包名和MD5签名信息,当然也不仅仅限于应用程序的包名或MD5签名信息,也可以是其它各种有助于确定该应用程序的特征的唯一性信息。设置单元220提取应用程序的这些特征信息作为本实施例中悬浮窗特征信息。
[0195]本发明中通过注册到系统底层的后台服务进程,与设置在系统应用层的钩子函数实现通信,获取悬浮窗被添加时处于系统最顶层的应用程序进程或监测悬浮窗的添加函数被调用的资源路径,来判定出悬浮窗所属的应用程序,直接采用应用程序包名和/或签名查找预设表格中对应的用户指令来控制悬浮窗的显示。当用户每次运行该应用程序时,都能按照预先设置的用户指令控制所述悬浮窗的显示,进一步提高了悬浮窗的拦截效率。
[0196]而且,本发明将用户指令与该添加事件通知所提供的悬浮窗特征信息关联性存储为预设列表,其中悬浮窗特征信息范围全面,既能是绘制所述悬浮窗的属性值,如窗口布局文件名称信息和路径信息、窗口图片资源文件名称信息和路径信息、窗口布局大小和位置信息等;又能是该悬浮窗所属的应用程序的包名和/或MD5签名。在具体实施时,通过范围全面的悬浮窗特征信息来查找预设列表,根据列表中预存的用户指令实现对悬浮窗的显示控制,提高了系统对悬浮窗控制的准确性,降低漏查和误查的几率。
[0197]本实施例中,在将提取的悬浮窗特征信息与指令接收界面所接收的用户指令以一一映射关系关联性的存储为预设列表后,所述的预设列表被存储在远程服务器中。查询模块22查找存储在云端远程服务器中的预设列表时,通过钩子函数先构造基于提取的悬浮窗特征信息的一个远程请求,基于TCP/IP协议,将该请求通过远程接口发送至接入互联网的云端服务器,云端服务器将接收到的悬浮窗特征信息与预设列表中的数据信息进行对比,查找出与该悬浮窗特征信息映射的用户指令,基于TCP/IP协议通过远程接口将用户指令反馈给查询模块22。
[0198]本发明结合云端技术实现,通过查询模块22通过钩子函数发送包含所述悬浮窗特征信息的远程请求并接收远程服务器反馈的数据获得相应的用户指令,由于远程服务器中的数据更全面科学,使得得到的用户指令也更加科学精确,具有普遍适应性,从而可以避免造成误判,进一步提尚系统可靠性。
[0199]控制模块23,用于响应于其中表征允许或禁止悬浮窗显示的用户指令,通知后台服务进程放行或拦截该悬浮窗的显示行为。
[0200]查询模块22接收到的用户指令信息表征禁止该悬浮窗显示时,控制模块23通知钩子函数将该用户指令通知到后台服务进程,后台服务进程继而直接拦截悬浮窗被添加的行为,禁止其再次显示。在具体实施时,通知后台服务进程调用ActivityManager.MoveViewO函数,移除准备添加在系统桌面上的悬浮窗;或者控制模块23通知后台服务进程将WindowManager.LayoutParams对象中悬浮窗的可见属性设置为不可见,从而使悬浮窗消失;或者控制模块23通知钩子函数挂钩在执行悬浮窗添加的程序中时,直接绕过所述悬浮窗添加的指令,还可以自定义内容为空的钩子函数指令来替换掉悬浮窗添加程序中悬浮窗添加的指令,使得原悬浮窗添加程序运行时跳过而不执行悬浮窗添加的指令,从而实现对悬浮窗的显示拦截。
[0201]当查询模块22接收到的用户指令表征允许该悬浮窗显示时,控制模块22直接放行被拦截的悬浮窗的添加函数的运行入口点或显示服务接口,具体的做法是可以设置钩子函数向后台服务器返回空值,即后台服务进程对原悬浮窗添加程序不做任何处理,使该悬浮窗显示在系统桌面上。
[0202]由于本发明前述说明的两种方法实际上是本发明的一体两面,即两种方法在逻辑上可以存在于同一实施例中。为便于更直观地理解本发明,如下结合前述的两种方法介绍本发明的一个具体应用场景。
[0203]在实现了本发明的方法或装置的手机终端中,由一实施了本发明的安全APP软件向Android系统注册一个所述的后台服务进程,并构造所述钩子函数执行相应的操作,主要是通过注册到系统底层的后台服务进程监控显示悬浮窗的流程的函数或显示服务接口实现所述对悬浮窗添加行为的监听。当接收到由注册到系统底层的后台服务进程监听所产生的悬浮窗被添加的行为的事件通知后,可以先执行方法二中所述的根据所述事件通知所提供的悬浮窗特征信息查询预设列表以从中确定与之相对应的用户指令,其中预设列表可以是本地的预设列表和位于云端服务器中的预设列表,当查找到预设列表中存在与所述提取的悬浮窗特征信息对应的用户指令时,直接根据接收到的用户指令,来放行或拦截该悬浮窗的显示行为。
[0204]其中,悬浮窗特征信息既可以是依据绘制所述的悬浮窗的属性值获得,也可以是依据监听到的悬浮窗被添加时处于系统最顶层的应用程序进程而确定该应用程序的报名和或MD5签名作为所述的特征信息;还可以是依据监听到的所述悬浮窗的添加函数的资源路径而确定悬浮窗所述应用程序的包名和/或MD5签名作为所述的特征信息。
[0205]但是,当本地或云端服务器中的预设列表中查找不到与所述悬浮窗特征信息相对应的用户指令时,在系统界面上直接显示该悬浮窗,并在系统界面上显示指令接收界面以接收用户指令,由用户选择是否禁止该悬浮窗的显示设置,以便实现人机交互,参见图5所示。所述指令可包括表征已显示的悬浮窗禁止显示的用户指令,也可以包括表征允许悬浮窗显示的用户指令。其中所述的指令接收界面的布局位置可以覆盖所显示的悬浮窗,也可以布局在系统桌面的任意位置上。在具体实施例中,所述指令接收界面显示弹出“发现XX弹出的悬浮窗,你可以选择”的提示,同时提供可选择的按钮,由用户通过选择“不再提示我”或“禁止该软件再弹”按钮确定对该悬浮窗的显示设置。并将提取的悬浮窗特征信息与指令接收界面所接收的用户指令关联性的存储为预设列表。如果用户点击“不再提示我”的按钮空间,则在后续该应用程序软件显示悬浮窗时,直接显示悬浮窗,而无需弹出指令接收界面询问用户;如果用户点击“禁止该软件再弹”的按钮控件,则在后续该应用程序软件显示悬浮窗时,直接拦截悬浮窗,并将该悬浮窗移除或者将该悬浮窗的显示属性设置为不可见,也不会再弹出指令接收界面询问用户,从而达到用户不受悬浮窗影响的目的。
[0206]由此可以看出,对于上述一体两面的本发明的两种方法而言,在程序设计时,可以将两种方法加以融合。例如,钩子函数进程接收到后台服务进程的事件通知时,可以先行查询预设列表,并以条件语句对其进行判断。当预设列表中已经存在当前待显示的悬浮窗的特征信息与用户指令的映射关系数据时,说明已依据本发明所实现的安全APP已非首次发现该悬浮窗,用户指令已经记载,由此即可按照本发明的控制方法处理之。当预设列表中尚未存在当前待显示的悬浮窗的特征信息与用户指令的映射关系数据时,意味着该悬浮窗被依据本发明所实现的安全APP首次发现,有必要对其进行安全识别,从而接收用户指令以进行设置,由此可按本发明的设置方法处理之。
[0207]综上所述,本发明通过注册到系统底层的后台服务进程来监听显示于系统桌面的悬浮窗被添加的行为,并显示指令接收界面以接收用户指令设置和控制该悬浮窗的显示和消失;即一旦系统桌面中弹出悬浮窗,随即会显示指令接收界面来询问用户,便能根据用户的指令有效的设置和控制该悬浮窗的显示行为。并将用户指令与该添加事件通知所提供的悬浮窗特征信息关联性存储为预设列表,当出现悬浮窗添加行为时,可直接通过悬浮窗特征信息查询预设列表中与该悬浮窗对应的预先存储的用户指令,根据用户指令来放行或拦截该悬浮窗的显示行为;由此解决了现有技术中不能对悬浮窗的显示进行有效拦截的技术问题,通过查找预设列表的方式能提升悬浮窗拦截效率,提升用户操作智能终端的体验。
[0208]在此处所提供的说明书中,虽然说明了大量的具体细节。然而,能够理解,本发明的实施例可以在没有这些具体细节的情况下实践。在一些实施例中,并未详细示出公知的方法、结构和技术,以便不模糊对本说明书的理解。
[0209]虽然上面已经示出了本发明的一些示例性实施例,但是本领域的技术人员将理解,在不脱离本发明的原理或精神的情况下,可以对这些示例性实施例做出改变,本发明的范围由权利要求及其等同物限定。
【主权项】
1.一种悬浮窗显示设置方法,其特征在于,包括以下步骤: 接收由注册到系统底层的后台服务进程监听而产生的显示于系统桌面的悬浮窗被添加的行为的事件通知; 显示指令接收界面以接收用户指令,将用户指令与该事件通知所提供的悬浮窗特征信息关联性存储以实施设置; 响应于表征禁止悬浮窗显示的用户指令,通知所述后台服务进程控制所述悬浮窗从系统桌面中消失。2.根据权利要求1所述的方法,其特征在于,通过识别用于显示悬浮窗的流程的函数或显示服务接口而实现所述对悬浮窗行为的监听。3.根据权利要求1所述的方法,其特征在于,所述悬浮窗特征信息依据绘制所述悬浮窗的属性值而获得。4.根据权利要求1所述的方法,其特征在于,所述悬浮窗特征信息依据监听到的所述悬浮窗被添加时处于系统最顶层的应用程序进程而确定该应用程序的包名和/或MD5签名作为所述的特征信息。5.根据权利要求1所述的方法,其特征在于,所述悬浮窗特征信息依据监听到的所述悬浮窗的添加函数的资源路径而确定悬浮窗所属应用程序的包名和/或MD5签名作为所述的特征信息。6.一种悬浮窗显示设置装置,其特征在于,包括: 通知接收模块,用于接收由注册到系统底层的后台服务进程监听而产生的显示于系统桌面的悬浮窗被添加的行为的事件通知; 指令接收模块,用于显示指令接收界面以接收用户指令,将用户指令与该事件通知所提供的悬浮窗特征信息关联性存储以实施设置; 处理模块,用于响应于表征禁止悬浮窗显示的用户指令,通知所述后台服务进程控制所述悬浮窗从系统桌面中消失。7.根据权利要求6所述的装置,其特征在于,所述通知接收模块还被配置为通过识别用于显示悬浮窗的流程的函数或显示服务接口而实现所述对悬浮窗行为的监听。8.根据权利要求6所述的装置,其特征在于,所述指令接收模块包括有预设单元,所述预设单元被配置为依据绘制所述悬浮窗的属性值而获得所述悬浮窗特征信息。9.一种悬浮窗显示控制方法,其特征在于,包括以下步骤: 接收由注册到系统底层的后台服务进程截获悬浮窗添加行为而产生的事件通知; 以所述事件通知所提供的悬浮窗特征信息查询预设列表以从中确定与之相对应的用户指令; 响应于其中表征允许或禁止悬浮窗显示的用户指令,通知后台服务进程放行或拦截该悬浮窗的显示行为。10.一种悬浮窗显示控制装置,其特征在于,包括: 通知接收模块,用于接收由注册到系统底层的后台服务进程截获悬浮窗添加行为而产生的事件通知; 查询模块,用于以所述事件通知所提供的悬浮窗特征信息查询预设列表以从中确定与之相对应的用户指令; 控制模块,用于响应于其中表征允许或禁止悬浮窗显示的用户指令,通知后台服务进程放行或拦截该悬浮窗的显示行为。
【专利摘要】本发明涉及广告拦截技术,一方面涉及一种悬浮窗显示设置方法和装置。该悬浮窗显示设置方法,包括以下步骤:接收由注册到系统底层的后台服务进程监听而产生的显示于系统桌面的悬浮窗被添加的行为的事件通知;显示指令接收界面以接收用户指令,将用户指令与该事件通知所提供的悬浮窗特征信息关联性存储以实施设置;响应于表征禁止悬浮窗显示的用户指令,通知所述后台服务进程控制所述悬浮窗从系统桌面中消失。此外,基于前述方法还公开了一种悬浮窗显示控制方法和装置。解决了现有技术中不能对悬浮窗的显示进行有效拦截的技术问题,通过查找预设列表的方式能提升悬浮窗拦截效率,提升用户操作智能终端的体验。
【IPC分类】G06F21/55
【公开号】CN104881601
【申请号】CN201510338309
【发明人】刘昕, 马鸣, 张越, 刘新
【申请人】北京奇虎科技有限公司, 奇智软件(北京)有限公司
【公开日】2015年9月2日
【申请日】2015年6月17日
转载请注明原文地址:https://www.famiwei.com/read-8138475.html

最新回复(0)