按键事件处理方法、装置、存储介质及终端与流程

文档序号:30073830发布日期:2022-05-18 02:45阅读:80来源:国知局
按键事件处理方法、装置、存储介质及终端与流程

1.本技术涉及通信技术领域,尤其涉及一种按键事件处理方法、装置、存储介质及终端。


背景技术:

2.基于安卓系统的终端,例如智能电视等,为了方便用户操控,提供了面板按键以及遥控器来对其进行控制。尤其是遥控器,按键功能丰富,通过遥控,可以快速、便捷的操作智能电视,极大的方便了用户,带来了与终端的交互体验的提升。然而按键功能丰富的同时也使得终端中的按键事件的按键处理逻辑日益复杂,尤其是按键拦截处理逻辑。
3.由于在按键事件的按键处理逻辑的开发初期没有合理的方案设计,在后期项目中,来了新需求时就添加一段代码,长此以往,导致安卓系统中按键处理逻辑较为复杂、冗余较多。同时,由于当前按键拦截处理逻辑中,没有按键分发/通知到应用程序的有效方式,在应用程序有对按键处理需求的场景中,多使用广播或服务的形式实现跨进程通信(应用程序进程和系统进程),例如,当需要对应用程序进行通知时,使用广播或服务的方式向应用程序发送对应的通知。然而广播或服务的方式有极可能会造成延迟,且很容易造成丢弃所对应的数据包,造成效率较低,且易带来系统性能损耗,影响安卓系统的性能。


技术实现要素:

4.本技术实施例提供一种按键事件处理方法、装置、存储介质及终端,能统一的设置应用程序的拦截数据,统一的对应用程序的按键事件进行处理,且能大幅降低安卓系统的负荷,避免安卓系统的资源过度消耗。
5.本技术实施例提供了一种按键事件处理方法,应用于终端中,终端安装有至少一个应用程序,所述按键事件处理方法包括:
6.在终端系统的内核检测到按键事件时,确定所述按键事件所对应的目标按键,并调用系统的窗口管理器;
7.获取所述窗口管理器中保存的应用程序的拦截数据,所述拦截数据包括应用程序的待拦截的按键组合和所述应用程序对应的回调函数,所述拦截数据是应用程序预先通过新增的统一输入管理接口设置,并发送至所述窗口管理器中保存;
8.根据所述目标按键、所述应用程序的待拦截的按键组合和所述回调函数,对所述按键事件对应的所述目标按键进行按键拦截处理。
9.本技术实施例还提供了一种按键事件处理装置,应用于终端中,终端安装有至少一个应用程序,所述按键事件处理装置包括:
10.检测确定模块,用于在终端系统的内核检测到按键事件时,确定所述按键事件所对应的目标按键,并调用系统的窗口管理器;
11.数据获取模块,用于获取所述窗口管理器中保存的应用程序的拦截数据,所述拦截数据包括应用程序的待拦截的按键组合和所述应用程序对应的回调函数,所述拦截数据
是应用程序预先通过新增的统一输入管理接口设置,并发送至所述窗口管理器中保存;
12.拦截处理模块,用于根据所述目标按键、所述应用程序的待拦截的按键组合和所述回调函数,对所述按键事件对应的所述目标按键进行按键拦截处理。
13.本技术实施例还提供了一种计算机可读存储介质,所述计算机可读存储介质中存储有多条指令,所述指令适于由处理器加载以执行上述任一项按键事件处理方法。
14.本技术实施例还提供了一种终端,包括处理器和存储器,所述处理器与所述存储器电性连接,所述存储器用于存储指令和数据,所述处理器用于上述任一项所述的按键事件处理方法中的步骤。
15.本技术提供的按键事件处理方法、装置、存储介质及终端,通过新增的统一输入管理接口实现了应用程序进程和系统进程之间的相互通信,且通过该统一输入管理接口来供应用程序设置拦截数据,应用程序的拦截数据可统一进行设置且统一进行管理,如统一将拦截数据保存在窗口管理器中,一方面避免了系统中按键处理逻辑混乱和冗余,另一方面,在按键事件处理时,直接从窗口管理器中读取拦截数据,无需系统通过多次属性的读取和写入操作,大大降低了系统的负荷和资源消耗。而且,应用程序的拦截数据中包括待拦截的按键组合,可供应用程序设置多个待拦截的按键,针对新增待拦截的按键需求时也不用单独增加一段代码从而避免造成按键处理逻辑过多的冗余。此外,应用程序的拦截数据中还包括应用程序的回调函数,该回调函数是应用程序设置的,如此,可通过回调的方式来通知应用程序进行对应的处理,而避免使用广播、服务等方式来通知应用程序,降低系统的负荷和资源消耗,提高终端的系统的性能。
附图说明
16.下面结合附图,通过对本技术的具体实施方式详细描述,将使本技术的技术方案及其它有益效果显而易见。
17.图1为本技术实施例提供的终端中与按键拦截处理相关的部分示意图。
18.图2为本技术实施例提供的按键事件处理方法的流程示例图。
19.图3为本技术实施例提供的按键事件处理方法的子流程示意图。
20.图4为本技术实施例提供的按键事件处理方法的另一流程示意图。
21.图5为本技术实施例提供的回调函数的注册和解除回调函数的注册的示意图。
22.图6为本技术实施例提供的按键事件处理装置的结构示意图。
23.图7为本技术实施例提供的终端的结构示意图。
24.图8为本技术实施例提供的终端的另一结构示意图。
具体实施方式
25.下面将结合本技术实施例中的附图,对本技术实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本技术一部分实施例,而不是全部的实施例。基于本技术中的实施例,本领域技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本技术保护的范围。
26.本技术实施例提供一种按键事件处理方法、装置、存储介质及终端。本技术实施例提供的任一种按键事件处理装置,可以集成在终端中,该终端可以包括智能手机、pad、穿戴
式设备、机器人、智能电视、智能空调等。该终端的系统可以为安卓系统或者苹果系统或者是其他的系统,且该终端中包括至少一个应用程序。该终端中可以提供面板按键或者遥控器来对其进行控制。
27.下文中以终端的系统为安卓系统为例进行说明。
28.由于需要提供面板按键或者遥控器来对终端进行控制,因此终端的按键事件处理非常重要,本技术实施例中的按键处理逻辑包括按键拦截处理逻辑。
29.在现有终端的按键事件的按键拦截处理的过程中,经长期观察、总结和分析,存在着以下不合理之处:
30.逻辑复杂,代码冗余:由于在开发初期没有做合理的方案设计,在后期项目中,来了新需求时(需新增按键事件的按键拦截处理逻辑)就添加一段代码,长此以往,导致安卓系统中按键处理逻辑较为复杂、冗余较多。
31.业务侵入,独立性差:由于历史原因,很多本该应用程序处理的逻辑,也被强行加入了安卓系统的按键处理逻辑中,导致安卓系统的按键处理逻辑包含了大量的业务代码。例如,点击上键时启动一个应用程序,当前使用的方式是将启动应用程序的功能写在安卓系统的框架里面,通过安卓系统来启动应用,如此,导致启动应用程序的业务处理逻辑的代码被加入了安卓系统的按键处理逻辑中,安卓系统的功能和应用程序的功能糅合在一起。
32.耗时操作,损耗性能:由于没有统一的性能规范要求,在按键拦截处理流程中,每一次的按键事件处理,安卓系统都会通过多次属性的读取和写入操作,来获取应用程序需要对哪些按键事件进行响应,以此来确定按键事件中对应的按键关联的应用程序。例如,安卓系统不知道应用程序的哪些按键设置了按键拦截,因此,需要多次读取应用程序的一些相关属性,同时还涉及写入操作。而且,由于当前无法做到对应用程序的状态进行感知,因此,需要频繁查询对关键关联的应用程序是否还属于活动(activity)的应用程序。例如,某应用程序设置了对上、下、左、右键的拦截处理,但当前不知道终端前端运行的是否有该应用程序,因此,需要频繁查询该应用程序是否还属于活动的应用程序。如此,多次属性的读取和写入操作,频繁查询活动的应用程序,会显著增加按键处理耗时,影响安卓系统的性能。
33.没有通道,多靠广播:由于当前按键拦截处理逻辑中,没有按键分发到应用程序的有效方式(或者理解为没有应用程序与安卓系统进行连接通信的有效方式),在应用程序有对按键处理需求的场景中,多使用广播或服务的形式实现跨进程通信(应用程序进程与安卓系统的系统进程),例如,当需要对应用程序进行通知时,使用广播或服务的方式向应用程序发送对应的通知。然而广播或服务的方式有极可能会造成延迟,且很容易造成丢弃所对应的数据包,造成效率较低,且易带来系统性能损耗。
34.基于上述不足,本技术实施例对现有按键拦截处理功能进行了重构,提出了一种全新的按键事件处理方法、装置、存储介质及终端,旨在剥离非系统级的业务代码,提升按键处理效率,降低系统带来的性能损耗,提升可扩展性和可维护性。
35.如图1所示,为本技术实施例提供的终端中与按键拦截处理相关的部分示意图。在该终端中,包括安卓系统的内核(kernel)、安卓系统的系统框架和至少一个应用程序,如包括应用程序1、应用程序2等。安卓系统的内核可用于检测按键事件,如各种输入设备触发的按键事件,如event0、event1等。
36.其中,安卓系统的系统框架包括软件开发工具包(software development kit,sdk)、窗口管理服务(windowmanagerservice)和窗口管理器(phonewindowmanager)。
37.在软件开发工具包中新增输入管理接口,inputmanager,该新增的输入管理接口实现了应用程序进程与安卓系统进程中间的相互通信,提供了应用程序进程访问系统框架中的窗口管理服务的通道,且通过该输入管理接口可设置应用程序的拦截数据。在该实施例中,窗口管理服务仅仅是一个通道,将来自于应用程序设置的拦截数据转发至窗口管理器中。需要注意的是,现有的按键拦截处理流程中,应用程序并不能访问窗口管理服务。
38.其中,窗口管理器中保存有应用程序通过输入管理接口设置的拦截数据。该拦截数据包括应用程序的标识信息、应用程序待拦截的按键组合(keymap)和应用程序对应的回调函数(keyeventlistener)。其中,标识信息可以为应用程序的包名(pkgname)或者是其他的标识信息,应用程序待拦截的按键组合中包括至少一个按键和至少一个按键所对应的按键处理类型,每个按键对应一个按键处理类型。
39.应用程序的回调函数中包括应用程序进程的状态检测函数。该状态检测函数用于实现对应用程序的状态进行感知,该状态检测函数是安卓系统提供的,安卓系统会将应用程序的状态告知窗口管理器,解决了现有方案中不能对应用程序进行状态感知的问题。此外,应用程序的回调函数中还可以根据实际需要添加应用程序所需要处理的业务处理逻辑,需要注意的是,由于回调函数中还可以包括应用程序所需处理的业务处理逻辑,因此,应用程序所对应的业务处理逻辑无需掺杂在安卓系统的系统框架中,分离了安卓系统和业务处理逻辑,将系统和应用程序做到功能隔离,剥离了非系统级业务处理逻辑,实现将安卓系统和应用程序的业务处理逻辑解耦。
40.基于图1所示的示意图,下文中将对按键事件处理方法、装置、存储介质及终端进行详细的描述。
41.请参阅图1,图2是本技术实施例提供的按键事件处理方法的流程示意图,该按键事件处理方法应用于终端中,该按键事件处理方法包括如下步骤。
42.101,在终端系统的内核检测到按键事件时,确定按键事件所对应的目标按键,并调用系统的窗口管理器。
43.当终端上的面板按键被触发,如通过点击/触摸/语音等方式触发,例如接收到语音指令“开启应用程序a”,则触发启动应用程序a所对应的按键;或者触发遥控器以触发终端上的按键时,安卓系统的内核会检测到该按键所对应的按键事件。检测到按键事件,确定按键事件所对应的目标按键。例如确定键、上键、下键、左键、右键等等。
44.安卓系统的内核检测到按键事件后,调用安卓框架中的窗口管理器,利用窗口管理器进行进一步的处理。
45.102,获取窗口管理器中保存的应用程序的拦截数据,所述拦截数据包括应用程序的待拦截的按键组合和应用程序对应的回调函数,所述拦截数据是应用程序预先通过新增的统一输入管理接口设置,并发送至窗口管理器中保存。
46.窗口管理器中保存有至少一个应用程序的拦截数据。每个应用程序的拦截数据包括该应用程序的标识信息、该应用程序的待拦截的按键组合和该应用程序对应的回调函数。该应用程序的按键组合中包括至少一个待拦截的按键和至少一个按键所对应的按键处理类型。需要注意的是,该处的按键处理类型是在按键拦截处理的过程中,对于应用程序拦
截按键的需求,长期观察、总结、提炼和分类,而确定的。现有方案中并没有对按键拦截处理中的按键事件确定其拦截处理的类型,且对该拦截的按键处理类型进行分类。
47.在本实施例中,按键处理类型包括以下四类。需要注意的是,在其他实施例中,管理处理类型还可以包括更多或者更少的类型。
48.应用通知类型(第一类型):在特定场景下,指定的部分按键,走安卓系统的原有系统处理流程(或者是原有系统处理逻辑)的同时,还需要将此按键事件通知到应用程序。例如,在终端的智能音响模式下,音量+/音量-按键、静音键等,在走原有系统流程调节音量的同时,还要通知应用程序处理,由其自己决定响应逻辑,如亮屏等。如当触发了音量+按键事件时,除了要实现增加音量的同时,还需要通知应用程序实现亮屏等。
49.应用消费类型(第二类型):在特定场景下,指定的部分按键需要被指定的应用程序消费掉,同时不再走按键对应的原有系统处理流程。例如,在终端的智能音箱模式下,音箱键或者power键,需要被智能音箱应用响应,同时不能再走对应按键的原有系统按键处理流程。
50.仅允许类型(第三类型):该种类型适用于待拦截的按键较多的情况下。在特定场景下,仅放行指定的按键,其它按键被系统直接拦截;由于需要拦截的按键众多,不适合枚举设置,因此取仅允许代表这种场景,方便设置。例如,在eas模式下,仅响应power键,其它按键全部拦截。
51.仅拦截类型(第四类型):该种类型适用于待拦截的按键较少的情况下。在特定场景下,仅拦截指定的按键,其它按键正常走原有系统处理流程。例如,p模式下,拦截遥控器power键,不能待机,其它按键可以正常响应。
52.其中,第三类型和第四类型为互补关系。
53.通过对按键拦截类型进行分类,实现对不同按键拦截类型进行不同处理,以方便对所有按键事件的统一管控。
54.在一实施例中,应用程序对应的回调函数包括应用程序对应的应用程序进程的状态检测函数。该状态检测函数用于实现对应用程序的状态进行感知,该状态检测函数是安卓系统提供的,安卓系统会将应用程序的状态告知窗口管理器,解决了现有方案中需要频繁查询当前活动(topactivity)的应用程序,即解决现有方案中不能对应用程序进行状态感知的问题,实现了应用程序的进程状态的监控,降低安卓系统的负荷和资源消耗,同时也降低按键处理逻辑的耗时。
55.在一实施例中,回调函数中还可以包括应用程序所需处理的业务处理逻辑,因此,应用程序所对应的业务处理逻辑无需掺杂在安卓系统的系统框架中,分离了安卓系统和业务处理逻辑,将安卓系统和应用程序做到功能隔离,剥离了非系统级业务处理逻辑,实现将安卓系统和应用程序的业务处理逻辑解耦,提高安卓系统的安全性,且通过回调的方式来处理应用程序的业务处理逻辑,相对于现有方案中的广播、服务等通知的方式,可降低安卓系统的负荷和资源消耗,提高安卓系统的性能,另外,通过回调的方式提供了应用程序对待拦截的按键的自由处理能力。
56.即回调函数提供应用程序对感兴趣按键的自由处理能力,同时为应用程序提供了监控功能,如监控应用程序进程的进程状态,还实现了安卓系统和应用程序的业务处理逻辑的解耦,此外,回调还用于发生应用程序感兴趣的按键事件时,通知应用程序来进行处
理,提供一个跨进程(跨应用程序进程和系统进程)的事件通知通道。
57.上述应用程序的拦截数据是应用程序预先通过新增的输入管理接口设置,并发送至窗口管理器中保存。其中,应用程序调用输入管理接口设置应用程序的拦截数据,并通过窗口管理服务发送至窗口管理器,窗口管理器将应用程序对应的拦截数据进行保存。将应用程序对应的拦截数据保存在窗口管理器中,每次按键事件处理时,只需从窗口管理器中获取拦截数据,尤其是获取应用程序的待拦截的按键组合即可,无需安卓系统多次读取应用程序的属性以及进行多次的写入操作,来获取应用程序需要对哪些按键事件进行响应的问题,大大降低了安卓系统的负荷和资源消耗。而且,通过该统一输入管理接口来供应用程序设置拦截数据,应用程序的拦截数据可统一进行设置且统一进行管理,避免了安卓系统中按键处理逻辑混乱和冗余。
58.103,根据目标按键、应用程序的待拦截的按键组合和回调函数,对按键事件对应的目标按键进行按键拦截处理。
59.其中,对按键事件对应的目标按键进行按键拦截处理,可在按键加入队列(handlekeyboforequeueing)的过程中执行。按键事件发生,会进入handlekeyboforequeueing中。
60.在一实施例中,回调函数中包括应用程序对应的应用程序进程的状态检测函数,该状态检测函数用于检测应用程序进程的进程状态,上述103的步骤,包括:检测是否存在应用程序设置了按键拦截;若存在应用程序设置了按键拦截,根据应用程序的进程状态,确定目标应用程序;根据目标按键、目标应用程序的待拦截的按键组合和目标应用程序的回调函数,对按键事件对应的目标按键进行按键拦截处理;若没有应用程序设置按键拦截,则继续目标按键的原有系统处理流程。
61.其中,检测是否有应用程序设置了按键拦截。具体地,可检测窗口管理器中是否保存有应用程序的拦截数据来确定是否有应用程序设置了按键拦截。该处可理解为一个开关,当应用程序设置了按键拦截之后,按键事件的按键拦截处理功能打开,否则,无需进行按键拦截处理,按键事件的按键拦截处理功能关闭。
62.其中,应用程序的进程状态包括活动状态、退出状态、异常退出状态等等。若存在应用程序设置了按键拦截,可获取当前处于活动(activity)状态的应用程序,即终端前端当前显示的应用程序,将当前处于活动状态的应用程序,确定为目标应用程序。可理解地,目标应用程序一般为一个。
63.确定了目标应用程序后,根据目标按键、目标应用程序的待拦截的按键组合和目标应用程序的回调函数,对按键事件对应的目标按键进行按键拦截处理。
64.在一实施例中,所述回调函数中还包括应用程序的业务处理逻辑,上述根据目标按键、目标应用程序的待拦截的按键组合和目标应用程序的回调函数,对按键事件对应的目标按键进行按键拦截处理的步骤,具体包括:获取目标应用程序的待拦截的按键组合中的每个按键的按键处理类型;根据目标按键、按键组合和对应的按键处理类型、目标应用程序的业务处理逻辑,对按键事件对应的目标按键进行按键拦截处理。其中,按键处理类型上文中已进行了描述,在此不再赘述。
65.在一实施例中,上述根据目标按键、按键组合和对应的按键处理类型、目标应用程序的业务处理逻辑,对按键事件对应的目标按键进行按键拦截处理的步骤,包括:当按键处
理类型包括应用通知类型,且应用通知类型的按键与目标按键匹配时,则通过目标应用程序回调函数通知目标应用程序进行业务处理逻辑的处理,目标按键继续原有系统处理流程;当按键处理类型不包括应用通知类型但包括应用消费类型,且应用消费类型的按键与目标按键匹配时,则通过目标应用程序回调函数通知目标应用程序进行业务处理逻辑的处理,且拦截目标按键;当按键处理类型不包括应用通知类型和应用消费类型,但包括第三类型时,若第三类型的按键与目标按键匹配,则放行目标按键,目标按键继续原有系统处理流程,若第三类型的按键与目标按键不匹配,则拦截目标应用程序的按键组合中与目标按键不匹配的按键;当按键处理类型不包括应用通知类型和应用消费类型,但包括第四类型时,若第四类型的按键与目标按键匹配,则拦截目标按键,若第四类型的按键与目标按键不匹配,则目标应用程序的按键组合中与目标按键不匹配的按键继续原有系统处理流程;当按键处理类型不包括应用通知类型、应用消费类型、第三类型和第四类型时,则目标按键继续原有系统处理流程。
66.其中,由于一个目标应用程序只有一个回调函数,因此,确定目标应用程序的待拦截的按键组合中与目标按键匹配的按键,并将该按键作为参数传入至该回调函数中,通过回调函数通知目标应用程序进行业务处理逻辑的处理。
67.需要注意的是,上述当按键处理类型为应用通知类型和应用消费类型时,通过回调函数所对应的回调的方式来通知应用程序进行业务处理逻辑的处理,如此,通过回调的方式通知应用程序进行处理,而不必将应用程序的业务处理逻辑写入至安卓系统中,避免使用服务、广播等方式来处理而对安卓系统性能的损耗,实现了安卓系统和应用程序的解耦;同时,通过回调函数提供应用程序对感兴趣按键(待拦截的按键)的自由处理能力,可理解为待拦截的按键的业务处理逻辑可根据具体应用程序具体应用场景来进行设定。
68.在一实施例中,如图3所示,上述根据目标按键、按键组合和对应的按键处理类型、目标应用程序的业务处理逻辑,对按键事件对应的目标按键进行按键拦截处理的步骤,包括如下步骤。
69.201,按键事件发生,进入handlekeyboforequeueing中。
70.202,检测当前状态下,是否存在应用程序设置了按键拦截。
71.该处可理解为一个开关,若存在应用程序设置了按键拦截,则执行步骤203;若没有应用程序设置按键拦截,则不做特殊处理,继续原有系统处理流程,如步骤215所示。
72.203,确定目标应用程序。根据应用程序的进程状态来确定目标应用程序。
73.204,判断按键处理类型是否为应用通知类型。
74.判断目标应用程序的待拦截的按键组合中的按键处理类型是否包括应用通知类型。若是,执行步骤205;若否,执行步骤207。
75.205,判断应用通知类型的按键是否与目标按键匹配。
76.若匹配,则执行步骤206,若不匹配,则执行步骤207。
77.206,通过回调函数通知目标应用程序进行业务处理逻辑的处理,同时目标按键继续原有系统处理流程。
78.如图1和图3中的通过回调(keyeventlistener)的方式来通知目标应用程序进行业务处理逻辑的处理,例如,通过回调的方式来通知目标应用程序亮屏;同时不干预目标按键的原有系统处理流程,即目标按键继续原有系统处理流程。
79.207,判断按键处理类型是否为应用消费类型。
80.判断目标应用程序的待拦截的按键组合中的按键处理类型是否包括应用消费类型。若是,执行步骤208;若否,执行步骤211。
81.208,判断应用消费类型的按键是否与目标按键匹配。
82.若匹配,则执行步骤209,若不匹配,则执行210。
83.209,通过回调函数通知应用程序进行业务处理逻辑的处理。
84.需要注意的是,步骤206和步骤209中所对应的业务处理逻辑不同。
85.210,拦截目标按键。拦截目标按键以终止目标按键的原有系统处理流程。
86.211,判断按键处理类型是否为仅允许类型。
87.判断目标应用程序的待拦截的按键组合中的按键处理类型是否包括仅允许类型。若是,执行步骤212;若否,执行步骤213。
88.212,判断仅允许类型的按键是否与目标按键匹配。
89.若匹配,则放行目标按键,不干预目标按键的处理流程,目标按键继续原有系统处理流程,如步骤215所示;若不匹配,则执行步骤210,以拦截目标应用程序的按键组合中与目标按键不匹配的按键。
90.213,判断按键处理类型是否为仅拦截类型。
91.判断目标应用程序的待拦截的按键组合中的按键处理类型是否包括仅拦截类型。若是,执行步骤214;若否,执行步骤215。
92.214,判断仅拦截类型的按键是否与目标按键匹配。
93.若匹配,则执行步骤210,拦截目标按键,终止目标按键的原有系统处理流程。若不匹配,则接着执行步骤215,不干预目标按键的原有系统处理流程。
94.215,继续原有系统处理流程。
95.该实施例是按键事件的按键拦截处理的逻辑的一种实施方式。
96.在一实施例中,按键事件处理方法还包括:应用程序通过输入管理接口设置该应用程序对应的拦截数据。在一实施例中,应用程序通过输入管理接口设置该应用程序对应的拦截数据,具体如图4中的步骤301至步骤303。
97.具体地,请参看图4,为本技术实施例提供的按键事件处理方法的另一流程示意图。该按键事件处理方法包括如下步骤。
98.301,当应用程序需设置按键拦截时,通过应用程序调用新增的输入管理接口,通过输入管理接口设置应用程序的待拦截的按键组合,并确定按键组合中的各按键的按键处理类型。
99.应用程序可以在合适的时机设置按键拦截,例如当应用程序的应用程序进程启动或者应用程序进入某个场景时,可设置按键拦截。设置按键拦截时,通过应用程序调用新增的输入管理接口,通过输入管理接口设置应用程序待拦截的按键组合,其中,按键组合中包括至少一个待拦截的按键,并确定按键组合中的各按键的按键处理类型,具体地,按键处理类型可参看上文中的所述。按键组合中的各按键的按键处理类型,可通过类型标识来表示,例如,第一类型为1来表示,第二类型为2来表示,第四类型为4来表示等。也可以是直接用文字或者其他字符或者其他数字来表示对应的按键处理类型。
100.302,通过输入管理接口注册应用程序的回调函数。
101.该回调函数中包括应用程序对应的应用程序进程的状态检测函数,该状态检测函数用于检测应用程序进程的进程状态。在一实施例中,该回调函数中还包括应用程序的业务处理逻辑。
102.通过输入管理接口调用注册的函数,例如registerlistener,来注册应用程序的回调函数。该回调函数的输入参数中包括按键,在应用程序中,当需要调用回调函数时,将所对应的具体按键传入至回调函数中,以通知应用程序来执行回调函数中的业务处理逻辑。
103.如图5所示,应用程序1在进入某个场景或者启动应用程序进程时,调用registerlistener进行回调函数的注册。其中,回调函数中包括应用程序对应的应用程序进程的状态检测函数和应用程序的业务处理逻辑,该状态检测函数用于检测应用程序进程的进程状态。
104.303,将应用程序的标识信息、所述应用程序待拦截的按键组合和对应的按键处理类型、所述回调函数发送至所述窗口管理器,并在窗口管理器中保存,其中,将应用程序的标识信息、应用程序待拦截的按键组合和对应的按键处理类型、回调函数作为应用程序的拦截数据。
105.将应用程序的标识信息、应用程序待拦截的按键组合和对应的按键处理类型、回调函数作为应用程序的拦截数据,并通过窗口管理服务发送至窗口管理器,以在窗口管理器中保存。
106.如图5所示,通过registerlistener注册回调函数后,添加对应的keyeventlistener函数。
107.应用程序向系统框架注册回调函数,当指定的按键事件到来时,会通过回调函数通知给应用程序进行业务处理逻辑的处理。
108.304,在安卓系统的内核检测到按键事件时,确定按键事件所对应的目标按键,并调用安卓系统的窗口管理器。
109.305,获取窗口管理器中保存的应用程序的拦截数据。
110.306,根据目标按键、应用程序的待拦截的按键组合和回调函数,对按键事件对应的目标按键进行按键拦截处理。
111.其中,步骤304至步骤306请参看上文中对应步骤的描述,在此不再赘述。
112.在一实施例中,按键事件处理方法还包括以下步骤。
113.307,当应用程序需解除按键拦截时,应用程序调用新增的输入管理接口,通过输入管理接口解除对应的回调函数的注册,并删除所保存的应用程序的拦截数据。
114.其中,应用程序可以在合适的时机取消按键拦截的设置,例如当应用程序的应用程序进程退出或者应用程序退出某个场景时,可取消按键拦截的设置。
115.在一实施例中,取消按键拦截的设置时,具体包括:应用程序调用新增的输入管理接口,通过输入管理接口解除对应的回调函数的注册,例如可通过unregisterlistener来解除回调函数的注册,并删除窗口管理器中所保存的应用程序的拦截数据。如图5所示,通过unregisterlistener解除回调函数的注册后,移除对应的keyeventlistener函数。
116.应用程序向系统框架解除回调函数的注册,此时安卓系统会停止按键事件向该应用程序的分发。
117.在上述实施例都是应用程序正常执行对应的实施例,对应的,通过应用程序调用输入管理接口来实现按键拦截的设置,以及实现取消按键拦截的设置。
118.但在执行的过程中,可能会存在异常情况,例如,应用程序异常奔溃导致未及时解除按键拦截或者未及时取消按键拦截的设置,对应的,按键事件处理方法还包括:当应用程序的状态监测函数检测到对应的进程状态为异常退出状态时,安卓系统解除应用程序的回调函数的注册,并删除所保存的应用程序的拦截数据。需要注意的是,该实施例中,系统框架主动解除应用程序所设置的按键拦截功能,解除已注册的回调函数,删除应用程序的拦截数据。如此,避免应用程序异常退出而导致的未删除的拦截数据等信息占用系统资源,同时保证按键拦截功能正常运行。
119.上述实施例中应用程序可以自由的根据自身业务需求设置按键拦截的拦截数据,该拦截数据中包括待拦截的按键组合和应用程序的回调函数。通过回调函数可以彻底将安卓系统和应用程序的功能解耦;通过回调的方式在应用程序进程和系统进程之间进行通信,相对于之前的广播通知等方式,可以提升效率;又由于减少了频繁的属性读取、top activity的查询等,可以大幅降低系统负荷,避免系统资源的过度消耗,提升系统流畅度,提升用户体验,同时还可提升安卓系统的可扩展性和可维护性。
120.根据上述实施例所描述的方法,本实施例将从按键事件处理装置的角度进一步进行描述,该按键事件处理装置具体可以作为独立的实体来实现,也可以集成在终端中来实现。
121.请参阅图6,图6具体描述了本技术实施例提供的按键事件处理装置,应用于终端中,该终端中包括至少一个应用程序。该按键事件处理装置可以包括:检测确定模块401、数据获取模块402以及拦截处理模块403。
122.检测确定模块401,用于在终端系统的内核检测到按键事件时,确定所述按键事件所对应的目标按键,并调用系统的窗口管理器。
123.数据获取模块402,用于获取所述窗口管理器中保存的应用程序的拦截数据,所述拦截数据包括应用程序的待拦截的按键组合和所述应用程序对应的回调函数,所述拦截数据是应用程序预先通过新增的统一输入管理接口设置,并发送至所述窗口管理器中保存。
124.拦截处理模块403,用于根据所述目标按键、所述应用程序的待拦截的按键组合和所述回调函数,对所述按键事件对应的所述目标按键进行按键拦截处理。
125.在一实施例中,所述回调函数中包括所述应用程序对应的应用程序进程的状态检测函数,所述状态检测函数用于检测所述应用程序进程的进程状态,对应地,拦截处理模块403,具体用于根据所述应用程序的进程状态,确定目标应用程序;根据所述目标按键、所述目标应用程序的待拦截的按键组合和所述目标应用程序的回调函数,对所述按键事件对应的所述目标按键进行按键拦截处理。
126.在一实施例中,所述回调函数中还包括所述应用程序的业务处理逻辑,对应地,拦截处理模块403,在执行根据所述目标按键、所述目标应用程序的待拦截的按键组合和所述目标应用程序的回调函数,对所述按键事件对应的所述目标按键进行按键拦截处理时,具体执行:获取所述目标应用程序的待拦截的按键组合中的每个按键的按键处理类型;根据所述目标按键、所述按键组合和对应的按键处理类型、所述目标应用程序的所述业务处理逻辑,对所述按键事件对应的目标按键进行按键拦截处理。
127.在一实施例中,拦截处理模块403在执行根据所述目标按键、所述按键组合和对应的按键处理类型、所述目标应用程序的所述业务处理逻辑,对所述按键事件对应的目标按键进行按键拦截处理的步骤时,具体执行:当所述按键处理类型包括应用通知类型,且所述应用通知类型的按键与所述目标按键匹配时,则通过所述目标应用程序回调函数通知所述目标应用程序进行所述业务处理逻辑的处理,所述目标按键继续原有系统处理流程;当所述按键处理类型不包括应用通知类型但包括应用消费类型,且所述应用消费类型的按键与所述目标按键匹配时,则通过所述目标应用程序回调函数通知所述目标应用程序进行所述业务处理逻辑的处理,且拦截所述目标按键;当所述按键处理类型不包括应用通知类型和应用消费类型,但包括第三类型时,若所述第三类型的按键与所述目标按键匹配,则放行所述目标按键,所述目标按键继续原有系统处理流程,若所述第三类型的按键与所述目标按键不匹配,则拦截所述目标应用程序的按键组合中与所述目标按键不匹配的按键;当所述按键处理类型不包括应用通知类型和应用消费类型,但包括第四类型时,若所述第四类型的按键与所述目标按键匹配,则拦截所述目标按键,若所述第四类型的按键与所述目标按键不匹配,则所述目标应用程序的按键组合中与所述目标按键不匹配的按键继续原有系统处理流程。
128.在一实施例中,如图6所示,按键事件处理装置还包括设置模块404。其中,设置模块404,用于当应用程序需设置按键拦截时,通过所述应用程序调用新增的输入管理接口,通过所述输入管理接口设置所述应用程序的待拦截的按键组合,并确定所述按键组合中的各按键的按键处理类型;通过所述输入管理接口注册所述应用程序的回调函数;将所述应用程序的标识信息、所述应用程序待拦截的按键组合和对应的按键处理类型、所述回调函数发送至所述窗口管理器,并在所述窗口管理器中保存,其中,将所述应用程序的标识信息、所述应用程序待拦截的按键组合和对应的按键处理类型、所述回调函数作为所述应用程序的拦截数据。
129.在一实施例中,如图6所示,按键事件处理装置还包括解除设置模块405。解除设置模块405,用于当应用程序需解除按键拦截时,所述应用程序调用新增的输入管理接口,通过所述输入管理接口解除对应的回调函数的注册,并删除所保存的所述应用程序的拦截数据。
130.在一实施例中,解除设置模块405,还用于当所述应用程序的所述状态检测函数检测到对应的进程状态为异常退出状态时,通过终端的系统解除所述应用程序的回调函数的注册,并删除所保存的所述应用程序的拦截数据。
131.具体实施时,以上各个模块可以作为独立的实体来实现,也可以进行任意组合,作为同一或若干个实体来实现,以上各个模块的具体实施可参见前面的方法实施例,具体可以达到的有益效果也请参看前面的方法实施例中的有益效果,在此不再赘述。
132.另外,本技术实施例还提供一种终端,如图7所示,终端500包括处理器501、存储器502。在终端中安装有至少一个应用程序。其中,处理器501与存储器502电性连接。
133.处理器501是终端500的控制中心,利用各种接口和线路连接整个终端的各个部分,通过运行或加载存储在存储器502内的应用程序,以及调用存储在存储器502内的数据,执行终端的各种功能和处理数据,从而对终端进行整体监控。
134.在本实施例中,终端500中的处理器501会按照如下的步骤,将一个或一个以上的
应用程序的进程对应的指令加载到存储器502中,并由处理器501来运行存储在存储器502中的应用程序,从而实现各种功能,如:
135.在终端系统的内核检测到按键事件时,确定所述按键事件所对应的目标按键,并调用系统的窗口管理器;获取所述窗口管理器中保存的应用程序的拦截数据,所述拦截数据包括应用程序的待拦截的按键组合和所述应用程序对应的回调函数,所述拦截数据是应用程序预先通过新增的统一输入管理接口设置,并发送至所述窗口管理器中保存;根据所述目标按键、所述应用程序的待拦截的按键组合和所述回调函数,对所述按键事件对应的所述目标按键进行按键拦截处理。
136.该终端可以实现本技术实施例所提供的按键事件处理方法任一实施例中的步骤,因此,可以实现本发明实施例所提供的任一按键事件处理方法所能实现的有益效果,详见前面的实施例,在此不再赘述。
137.图8示出了本发明实施例提供的终端的具体结构框图,该终端可以用于实施上述实施例中提供的按键事件处理方法。该终端包括以下的模块/单元。
138.rf电路610用于接收以及发送电磁波,实现电磁波与电信号的相互转换,从而与通讯网络或者其他设备进行通讯。rf电路610可包括各种现有的用于执行这些功能的电路元件,例如,天线、射频收发器、数字信号处理器、加密/解密芯片、用户身份模块(sim)卡、存储器等等。rf电路610可与各种网络如互联网、企业内部网、无线网络进行通讯或者通过无线网络与其他设备进行通讯。上述的无线网络可包括蜂窝式电话网、无线局域网或者城域网。上述的无线网络可以使用各种通信标准、协议及技术,包括但并不限于全球移动通信系统(global system for mobile communication,gsm)、增强型移动通信技术(enhanced data gsm environment,edge),宽带码分多址技术(wideband code division multiple access,wcdma),码分多址技术(code division access,cdma)、时分多址技术(time division multiple access,tdma),无线保真技术(wireless fidelity,wi-fi)(如美国电气和电子工程师协会标准ieee802.11a,ieee 802.11b,ieee802.11g和/或ieee 802.11n)、网络电话(voice over internet protocol,voip)、全球微波互联接入(worldwide interoperability for microwave access,wi-max)、其他用于邮件、即时通讯及短消息的协议,以及任何其他合适的通讯协议,甚至可包括那些当前仍未被开发出来的协议。
139.存储器620可用于存储软件程序(计算机程序)以及模块,如上述实施例中对应的程序指令/模块,处理器680通过运行存储在存储器620内的软件程序以及模块,从而执行各种功能应用以及数据处理。存储器620可包括高速随机存储器,还可包括非易失性存储器,如一个或者多个磁性存储装置、闪存、或者其他非易失性固态存储器。在一些实例中,存储器620可进一步包括相对于处理器680远程设置的存储器,这些远程存储器可以通过网络连接至终端600。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。
140.输入单元630可用于接收输入的数字或字符信息,以及产生与用户设置以及功能控制有关的键盘、鼠标、操作杆、光学或者轨迹球信号输入。具体地,输入单元630可包括触敏表面631以及其他输入设备632。触敏表面631,也称为触摸显示屏(触摸屏)或者触控板,可收集用户在其上或附近的触摸操作(比如用户使用手指、触笔等任何适合的物体或附件在触敏表面631上或在触敏表面631附近的操作),并根据预先设定的程式驱动相应的连接
装置。可选的,触敏表面631可包括触摸检测装置和触摸控制器两个部分。其中,触摸检测装置检测用户的触摸方位,并检测触摸操作带来的信号,将信号传送给触摸控制器;触摸控制器从触摸检测装置上接收触摸信息,并将它转换成触点坐标,再送给处理器680,并能接收处理器680发来的命令并加以执行。此外,可以采用电阻式、电容式、红外线以及表面声波等多种类型实现触敏表面631。除了触敏表面631,输入单元630还可以包括其他输入设备632。具体地,其他输入设备632可以包括但不限于物理键盘、功能键(比如音量控制按键、开关按键等)、轨迹球、鼠标、操作杆等中的一种或多种。
141.显示单元640可用于显示由用户输入的信息或提供给用户的信息以及终端600的各种图形用户接口,这些图形用户接口可以由图形、文本、图标、视频和其任意组合来构成。显示单元640可包括显示面板641,可选的,可以采用lcd(liquid crystal display,液晶显示器)、oled(organic light-emitting diode,有机发光二极管)等形式来配置显示面板641。进一步的,触敏表面631可覆盖显示面板641,当触敏表面631检测到在其上或附近的触摸操作后,传送给处理器680以确定触摸事件的类型,随后处理器680根据触摸事件的类型在显示面板641上提供相应的视觉输出。虽然在图中,触敏表面631与显示面板641是作为两个独立的部件来实现输入和输出功能,但是可以理解地,将触敏表面631与显示面板641集成而实现输入和输出功能。
142.终端600还可包括至少一种传感器650,比如光传感器、方向传感器、接近传感器以及其他传感器。作为运动传感器的一种,重力加速度传感器可检测各个方向上(一般为三轴)加速度的大小,静止时可检测出重力的大小及方向,可用于识别手机姿态的应用(比如横竖屏切换、相关游戏、磁力计姿态校准)、振动识别相关功能(比如计步器、敲击)等;至于终端600还可配置的陀螺仪、气压计、湿度计、温度计、红外线传感器等其他传感器,在此不再赘述。
143.音频电路660、扬声器661,传声器662可提供用户与终端600之间的音频接口。音频电路660可将接收到的音频数据转换后的电信号,传输到扬声器661,由扬声器661转换为声音信号输出;另一方面,传声器662将收集的声音信号转换为电信号,由音频电路660接收后转换为音频数据,再将音频数据输出处理器680处理后,经rf电路610以发送给比如另一终端,或者将音频数据输出至存储器620以便进一步处理。音频电路660还可能包括耳塞插孔,以提供外设耳机与终端600的通信。
144.终端600通过传输模块670(例如wi-fi模块)可以帮助用户接收请求、发送信息等,它为用户提供了无线的宽带互联网访问。虽然图示出了传输模块670,但是可以理解的是,其并不属于终端600的必须构成,完全可以根据需要在不改变发明的本质的范围内而省略。
145.处理器680是终端600的控制中心,利用各种接口和线路连接整个手机的各个部分,通过运行或执行存储在存储器620内的软件程序(计算机程序)和/或模块,以及调用存储在存储器620内的数据,执行终端600的各种功能和处理数据,从而对终端进行整体监控。可选的,处理器680可包括一个或多个处理核心;在一些实施例中,处理器680可集成应用处理器和调制解调处理器,其中,应用处理器主要处理操作系统、用户界面和应用程序等,调制解调处理器主要处理无线通信。可以理解地,上述调制解调处理器也可以不集成到处理器680中。
146.终端600还包括给各个部件供电的电源690(比如电池),在一些实施例中,电源可
以通过电源管理系统与处理器680逻辑相连,从而通过电源管理系统实现管理充电、放电、以及功耗管理等功能。电源690还可以包括一个或一个以上的直流或交流电源、再充电系统、电源故障检测电路、电源转换器或者逆变器、电源状态指示器等任意组件。
147.尽管未示出,终端600还包括摄像头(如前置摄像头、后置摄像头)、蓝牙模块等,在此不再赘述。具体在本实施例中,终端的显示单元是触摸屏显示器,终端还包括有存储器,以及一个或者一个以上的程序(计算机程序),其中一个或者一个以上程序存储于存储器中,且经配置以由一个或者一个以上处理器执行一个或者一个以上程序包含用于进行以下操作的指令:
148.在终端系统的内核检测到按键事件时,确定所述按键事件所对应的目标按键,并调用系统的窗口管理器;获取所述窗口管理器中保存的应用程序的拦截数据,所述拦截数据包括应用程序的待拦截的按键组合和所述应用程序对应的回调函数,所述拦截数据是应用程序预先通过新增的统一输入管理接口设置,并发送至所述窗口管理器中保存;根据所述目标按键、所述应用程序的待拦截的按键组合和所述回调函数,对所述按键事件对应的所述目标按键进行按键拦截处理。
149.具体实施时,以上各个模块可以作为独立的实体来实现,也可以进行任意组合,作为同一或若干个实体来实现,以上各个模块的具体实施可参见前面的方法实施例,在此不再赘述。
150.本领域普通技术人员可以理解,上述实施例的各种方法中的全部或部分步骤可以通过指令(计算机程序)来完成,或通过指令控制相关的硬件来完成,该指令可以存储于一计算机可读存储介质中,并由处理器进行加载和执行。为此,本发明实施例提供一种存储介质,其中存储有多条指令,该指令能够被处理器进行加载,以执行本发明实施例所提供的按键事件处理方法中任一实施例的步骤。
151.其中,该存储介质可以包括:只读存储器(rom,read only memory)、随机存取记忆体(ram,random access memory)、磁盘或光盘等。
152.由于该存储介质中所存储的指令,可以执行本发明实施例所提供的按键事件处理方法任一实施例中的步骤,因此,可以实现本发明实施例所提供的任按键事件处理方法所能实现的有益效果,详见前面的实施例,在此不再赘述。
153.以上对本技术实施例所提供的一种按键事件处理方法、装置、存储介质和终端进行了详细介绍,本文中应用了具体个例对本技术的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本技术的方法及其核心思想;同时,对于本领域的技术人员,依据本技术的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本技术的限制。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1