本发明涉及Android广播技术领域,尤其涉及一种事件的上报方法及上报系统。
背景技术:
随着移动互联网的普及,物理按键被广泛使用于各种移动便携设备。基于Android操作系统(谷歌开发的操作系统)进行开发,可以使用Android按键输入子系统来满足大部分的功能需求和开发。但是在实际使用中,有可能需要上报对按键特性的描述(如按键事件来自于旋钮、方向盘按键或者面板等),虽然现有的Android按键输入子系统可以实现,但是改动十分繁琐,牵一发而动全身。
Android按键输入子系统是处理器响应中断信号后把按键事件(类型、键码、按下或弹起)上报到Linux(一套免费使用和自由传播的操作系统)输入子系统,Android框架读取按键事件后经过键码映射后分发到上层。额外添加按键特性的话,改动的代码包括驱动层、框架层和应用层,工作量繁琐,没有良好的扩展性。
除了按键事件,像传感器检测、GPIO电平跳变等信号的检测也同样存在扩展性差的问题。
技术实现要素:
本发明所要解决的技术问题是:提供一种事件的上报方法及上报系统,能够增强应用程序的代码复用和可移植性,提高事件上报的可扩展性。
为了解决上述技术问题,本发明采用的技术方案为:
一种事件的上报方法,包括:
建立内核进程与用户进程之间的通信,建立用户进程与应用进程之间的通信;
内核进程获取待上报的事件;
内核进程将所述事件发送至用户进程;
用户进程将接收到的事件发送至应用进程;
应用进程将接收到的事件转换成Intent组件;
将所述Intent组件广播至注册过所述Intent组件的应用程序中。
本发明提供的另一个技术方案为:
一种事件的上报系统,包括:
通信建立模块,用于建立内核进程与用户进程之间的通信,建立用户进程与应用进程之间的通信;
内核进程,用于获取待上报的事件;以及将所述事件发送至用户进程;
用户进程,用于将接收到的事件发送至应用进程;
应用进程,用于将接收到的事件转换成Intent组件;将所述Intent组件广播至注册过所述Intent组件的应用程序中。
本发明的有益效果在于:通过内核进程获取到事件,再通过用户进程将获取到的事件发送至应用进程,应用进程接收到事件消息后,把事件转换成Android应用程序中的Intent组件,再通过广播的方式把intent组件广播到注册过该intent组件的应用程序中,从而为应用开发提供统一的接口,降低应用开发的难度,增强应用程序的代码复用和可移植性。
附图说明
图1为本发明实施例的事件的上报方法的流程示意图;
图2为本发明实施例的事件的上报系统的结构示意图;
图3为本发明实施例一的事件的上报方法的流程示意图。
标号说明:
1、通信建立模块;2、内核进程;3、用户进程;4、应用进程。
具体实施方式
为详细说明本发明的技术内容、所实现目的及效果,以下结合实施方式并配合附图予以说明。
本发明最关键的构思在于:应用进程将待上报的时间转换成intent组件,再通过广播的方式把Intent组件广播到注册过该Intent组件的应用程序中。
本发明涉及的技术术语解释:
请参照图1,本发明提供:
一种事件的上报方法,包括:
建立内核进程与用户进程之间的通信,建立用户进程与应用进程之间的通信;
内核进程获取待上报的事件;
内核进程将所述事件发送至用户进程;
用户进程将接收到的事件发送至应用进程;
应用进程将接收到的事件转换成Intent组件;
将所述Intent组件广播至注册过所述Intent组件的应用程序中。
进一步的,所述事件为按键事件,内核进程获取待上报的事件具体为:
按键中断后,内核进程获取按键事件的键值、操作类型和按键来源。
从上述描述可知,内核进程获取按键事件即获取键值(即按键键码)、操作类型和按键来源等属性,其中操作类型可以是按下、弹起等。上述事件不仅限于按键事件,还可以为传感器信号检测、GPIO电平跳边等信号的检测等事件。
进一步的,内核进程将所述事件发送至用户进程,具体为:
内核进程将所述事件按照预设的规则和格式发送至用户进程。
进一步的,应用进程将接收到的事件转换成Intent组件,具体为:
应用进程将接收到的事件按照预设的规则和格式转换成Intent组件。
从上述描述可知,内核进程按照预设的规则和格式将事件转换成规定的字符串,应用进程按照预设的规则和格式将事件转换成Intent组件,为应用开发提供相应的接口,从而实现增强广播机制的可扩展性和功能性。
进一步的,内核进程与用户进程之间通过netlink机制通信,用户进程与应用进程之间通过localsocket套接字通信。
从上述描述可知,netlink是用于实现用户进程与内核进程通信的一种特殊的进程间通信方式;localsocket(Android对Linux中Socket(套接字)进行了封装,采用JNI(实现了计算机编程语言Java和其他语言的通信方式)调用实现用户进程与应用进程之间的通信。当然,内核进程与用户进程、用户进程与应用进程之间也可以采用其他现有的能够实现相同效果的通信方式进行通信。
请参照图2,本发明的另一个技术方案为:
一种对应上述事件的上报方法的上报系统,包括:
通信建立模块1,用于建立内核进程2与用户进程3之间的通信,建立用户进程3与应用进程4之间的通信;
内核进程2,用于获取待上报的事件;以及将所述事件发送至用户进程3;
用户进程3,用于将接收到的事件发送至应用进程4;
应用进程4,用于将接收到的事件转换成Intent组件;将所述Intent组件广播至注册过所述Intent组件的应用程序中。
进一步的,所述事件为按键事件,内核进程2获取待上报的事件具体为:
按键中断后,内核进程2获取按键事件的键值、操作类型和按键来源。
进一步的,内核进程2将所述事件发送至用户进程3,具体为:
内核进程2将所述事件按照预设的规则和格式发送至用户进程3。
进一步的,应用进程4将接收到的事件转换成Intent组件,具体为:
应用进程4将接收到的事件按照预设的规则和格式转换成Intent组件。
进一步的,通信建立模块1采用netlink机制建立内核进程2与用户进程3之间的通信,采用localsocket套接字建立用户进程3与应用进程4之间的通信。
请参照图3,本发明的实施例一为:
一种按键事件的上报方法,包括:
通过netlink机制建立Linux下内核进程与用户进程之间的通信,通过localsocket套接字建立用户进程与应用进程之间的通信;
按键中断后,内核进程获取按键的事件的按键键码、按下/弹起、按键来源等属性;
内核进程将获取的按键键码、按下/弹起、按键来源等属性按照预设的规则和格式转换成字符串后发送至用户进程;
用户进程将接收到的包含有按键键码、按下/弹起、按键来源等属性的字符串发送至应用进程;
应用进程将接收到的包含有按键键码、按下/弹起、按键来源等属性的字符串转换成Android应用程序中的Intent组件;
将所述Intent组件广播至注册过所述Intent组件的应用程序中。
Intent组件是不同组件之间相互通讯的纽带,封装了不同组件之间通讯的条件。Intent组件本身是定义为一个类别(Class),一个Intent对象表达一个目的(Goal)或期望(Expectation),叙述其所期望的服务、动作、与动作有关的数据等,指明了请求的操作名称以及作为操作对象的数据的URI和其它一些信息。比如说,它可以承载对一个activity的请求,让它为用户显示一张图片,或者让用户编辑一些文本。而对于广播接收器而言,Intent对象指明了声明的行为。比如,它可以对所有感兴趣的对象声明照相按钮被按下。Android则根据此Intent对象之叙述,负责配对,找出相配的组件,然后将Intent对象传递给所找到的组件。把事件封装为Intent组件后,就可以通过广播的方式将事件上报给Android应用程序。
本实施例的按键事件的上报方法,当需要添加按键特性时,经应用进程转换后的Intent组件中包含有增加的特性,如Intent组件中包含有Android标准的按键键码、按键按下或弹起和增加的按键来源,应用程序通过广播接收的方式从该Intent组件获取到按键键码、按键按下或弹起和增加的按键来源,也就是获取到按键事件后根据不同的需求编写不同的代码程序,相比传统的事件上报方法,无需进行复杂的代码改动,具有良好的扩展性。
如果需要实现对传感器、GPIO电平跳变等信号的检测,只需把要检测的信号转换成所规定的字符串定义即可。
请参照图2,本发明的实施例二为:
一种与实施例一的按键事件的上报方法对应的上报系统,包括:
通信建立模块1,用于通过netlink机制建立Linux下内核进程2与用户进程3之间的通信,通过localsocket套接字建立用户进程3与应用进程4之间的通信;
内核进程2,用于按键中断后,获取按键的事件的按键键码、按下/弹起、按键来源等属性;将获取的按键键码、按下/弹起、按键来源等属性按照预设的规则和格式转换成字符串后发送至用户进程3;
用户进程3,用于将接收到的包含有按键键码、按下/弹起、按键来源等属性的字符串发送至应用进程4;
应用进程4,用于将接收到的包含有按键键码、按下/弹起、按键来源等属性的字符串转换成Android应用程序中的Intent组件;将所述Intent组件广播至注册过所述Intent组件的应用程序中。
综上所述,本发明提供的事件的上报方法及上报系统,通过Intent组件为应用开发提供相应的接口,采用广播的方式实现事件上报,不仅能够支持事件的上报功能,也增强了对事件特性的描述,能够有效地降低事件特性修改带来的代码修改量,提高了可扩展性和可塑性。
以上所述仅为本发明的实施例,并非因此限制本发明的专利范围,凡是利用本发明说明书及附图内容所作的等同变换,或直接或间接运用在相关的技术领域,均同理包括在本发明的专利保护范围内。