具体实施方式
为了能够更清楚地理解本公开的上述目的、特征和优点,下面将对本公开的方案进行进一步描述。需要说明的是,在不冲突的情况下,本公开的实施例及实施例中的特征可以相互组合。
在下面的描述中阐述了很多具体细节以便于充分理解本公开,但本公开还可以采用其他不同于在此描述的方式来实施;显然,说明书中的实施例只是本公开的一部分实施例,而不是全部的实施例。
图1为本公开实施例提供的一种控制端与被控端的交互示意图,用于对本公开实施例进行示例性说明,但不应理解为对本公开实施例的具体限定。控制端(Client端)和被控端(Server端)可以是任意能够进行交互的不同电子设备,并且,控制端上连接有键盘,支持用户的按键操作,控制端可以将按键事件(包括按键的按下事件和抬起事件)传输至被控端,使得被控端根据接收的按键事件实现相应键值的输入。示例性地,控制端可以是连接有实体键盘的无线屏设备,被控端可以是移动终端,例如手机,无线屏设备可以基于用户在键盘上的按键操作,将按键事件传输至手机,手机接收按键事件,从而实现相应键值的输入。
区别于现有技术中被控端接收特定按键的按下事件,并基于该按下事件的时间戳进行一定时长统计,然后根据统计时长确定当前按键是否为长按键,如果是,则利用按下事件模拟软件(具体可以根据现有实现原理实现)生成当前按键的模拟按下事件(即模拟生成多个按下事件),从而基于多个模拟按下事件实现当前按键值的连续性输入,直至接收到当前按键的抬起事件为止,在本公开实施例中,如图1所示,被控端中的模拟按下事件的生成功能被预先禁止(例如在Android系统中可以通过调用POLICY_FLAG_DISABLE_KEY_REPEAT实现,具体可以参考现有技术),被控端直接根据接收的特定按键的按下事件和模拟按下事件,实现特定按键值的连续性输入,直至接收到该特定按键的抬起事件为止,被控端中无需执行长按键的判断以及按下事件的模拟生成操作,而是将长按键的判断以及按下事件的模拟生成操作均在控制端执行,也即区别于现有技术中控制端只向被控端发送所接收的按下事件和抬起事件的情况,本公开实施例中控制端向被控端发送所接收的按下事件、模拟生成的模拟按下事件以及接收的抬起事件,从而避免现有方案中因通讯网络质量不稳定引起的抬起事件传输延迟,使得被控端误将按键单击操作判断为长按操作(或者连击操作),提高了按键长按操作的判断准确性以及键值连续性输入的准确性。
图2为本公开实施例提供的一种按键事件处理方法的流程图,该方法可以由按键事件处理装置执行,该装置可以采用软件和/或硬件实现,并可集成在控制端,该控制端可以是任意能够与被控端交互的电子设备,例如控制端是连接有实体键盘的无线屏设备,被控端是移动终端,具体地,可以根据实际应用场景而定,本公开实施例不作具体限定。
如图2所示,本公开实施例提供的按键事件处理方法可以包括:
S200、与被控端建立通讯连接。
控制端可以基于现有方案中可适用的任意通讯协议,与被控端建立通讯连接,以实现控制端和被控端之间的数据交互,例如界面内容的同步展示、按键事件数据的传输等。关于通讯连接的具体实现原理本公开实施例不作具体限定。
示例性地,控制端可以基于无线网络,例如WiFi网络,与被控端建立通讯连接,并显示被控端的界面内容。基于无线网络的通讯方式,提高了控制端和被控端之间的通讯便捷性。控制端和被控端建立无线连接后,可以在自身显示屏幕上同步显示被控端的界面内容,被控端中的键值输入操作同时会在控制端的显示屏幕上进行显示。以控制端为连接有实体键盘的无线屏设备,被控端为移动终端为例,无线屏设备与移动终端建立无线连接后,无线屏设备可以同步显示移动终端中的界面内容,然后无线屏设备根据用户在键盘上的按键操作,获取按键按下事件并向移动终端发送,从而实现移动终端中的键值输入的远程控制。
S201、获取用户输入的关于第一按键的第一按下事件。
其中,第一按键可以是连接在控制端的键盘上的任意按键。控制端可以根据用户在键盘上的触控操作,例如用户点击键盘上的H键,或者根据用户针对键盘的语音控制操作,例如用户输入语音“输入键盘上的H键”,生成第一按下事件(即对应键盘上按键的按下操作)并存储在键盘设备文件中,然后可以从该键盘设备文件中获取第一按下事件。在Android/Linux系统中,键盘上的按下事件或抬起事件中均包括时间戳(用于表征当前事件对应的时间)、事件类型(即按下或抬起)、事件代码、事件数值等元素。
S202、基于第一按下事件中的第一时间戳,统计预设时长。
控制端在获取第一按下事件后,基于第一事件中的第一时间戳,例如将第一时间戳作为时间起点,统计预设时长,例如预设时长可以设置为统计500ms,具体可以根据需求灵活设置,然后根据在预设时长内是否获取到关于第一按键的第一抬起事件(即对应键盘上按键的抬起操作,表示用户结束键值的输入),确定当前第一按键是否为长按键。
S203、响应于在预设时长内未获取到关于第一按键的第一抬起事件,向被控端发送第一按下事件,并基于预设时长的结束时刻,按照预设时间间隔生成关于第一按键的第一模拟按下事件。
如果在预设时长内未获取到关于第一按键的第一抬起事件,表示当前第一按键是长按键,也即用户希望连续输入第一按键值(与第一按键对应的键值),控制端向被控端发送关于第一按键的第一按下事件,同时执行关于第一按键的按下事件模拟操作。示例性地,基于关于第一按键的第一按下事件中的时间戳t0,调用定时器进行预设时长统计,如果统计时长达到500ms时,未获取到关于第一按键的第一抬起事件,则表示当前第一按键为长按键,向被控端发送第一按下事件,同时基于时刻t0+500ms继续进行计时,每隔预设时间间隔(具体可以根据需求而定,例如可以设置为50ms),模拟生成一次关于第一按键的第一模拟按下事件,并向被控端发送该第一模拟按下事件,例如可以在时刻t0+550ms模拟生成一次第一模拟按下事件并向被控端发送,在时刻t0+600ms模拟生成一次第一模拟按下事件并向被控端发送,根据时间间隔重复执行前述模拟按下事件的生成以及发送,直至获取到关于第一按键的第一抬起事件或者获取到关于其他按键的按键事件,则结束前述模拟按下事件的生成以及发送操作。当控制端中结束前述模拟按下事件的生成以及发送操作后,被控端中相应地结束键值的输入操作。即本公开实施例提供的按键事件处理方法还可以包括:响应于在预设时长之后获取到关于第一按键的第一抬起事件,结束第一模拟按下事件的生成;向被控端发送第一抬起事件;其中,第一抬起事件用于指示被控端结束第一按键值的输入。
如果在预设时长内获取到关于第一按键的第一抬起事件,表示当前第一按键不是长按键,而是短按键(或称为单击键),控制端中无需执行模拟按下事件的生成以及发送,可以直接将获取的第一抬起事件发送至被控端,使得被控端结束第一按键值的输入操作。
S204、向被控端发送第一模拟按下事件。
其中,被控端用于基于第一按下事件和第一模拟按下事件,执行第一按键值的连续输入操作。一次第一按下事件和一次第一模拟按下事件,分别对应被控端中第一按键值的一次输入操作。第一按下事件和一次第一模拟按下事件的事件总数决定了被控端中第一按键值的连续输入次数。
控制端在向被控端发送按键事件(包括第一按下事件、第一模拟按下事件或者第一抬起事件)的过程中,可以确定传输按键事件对应的网络Socket句柄,然后将按键事件写入,并传输至被控端。
在一种可选实施方式中,在获取用户输入的关于第一按键的第一按下事件之后,本公开实施例提供的按键事件处理方法还可以包括:
记录第一按下事件中的第一按键值和第一时间戳;
响应于获取到关于第二按键的第二按下事件,利用第二按下事件中的第二按键值和第二时间戳,更新在先记录的第一按键值和第一时间戳,以基于第二时间戳重新统计预设时长。
其中,第二按键是指区别于第一按键的任意按键。控制端在获取到关于第一按键的第一按下事件之后,可以记录第一按下事件中的第一按键值和第一时间戳,以便于后续调用定时器执行预设时长的统计操作、按下事件的模拟生成以及发送操作,确保第一按键是否为长按键的判断准确性、第一按键值的连续输入的准确性。如果在第一按下事件之后获取到关于第二按键的第二按下事件,说明用户的按键操作存在变更,需要利用第二按下事件中的第二按键值和第二时间戳更新在先记录的信息,并基于第二按下事件中的第二时间戳进行预设时长的统计,以确定第二按键是否为长按键,如果是,则需要模拟生成关于第二按键的第二模拟按下事件,并向被控端发送。
进一步地,在本公开实施例中,可以在基于第一时间戳统计的预设时长之后,获取关于第二按键的第二按下事件;相应地,本公开实施例提供的按键事件处理方法还可以包括:响应于获取到关于第二按键的第二按下事件,结束第一模拟按下事件的生成。即获取关于第二按键的第二按下事件后,如果控制端中已经执行了关于第一按键的第一模拟按下事件的生成操作,则结束第一模拟按下事件的生成,相应地,被控端中也将不再接收到第一模拟按下事件,并在接收到第一抬起事件后结束第一按键值的输入操作,此时,控制端基于第二按下事件中的第二时间戳进行预设时长的统计,以确定第二按键是否为长按键。通过结束第一模拟按下事件的生成,可以避免被控端中连续键值输入的错误执行。
当然,如果在基于第一时间戳统计的预设时长之内,获取关于第二按键的第二按下事件,此时控制端中未执行关于第一按键的第一模拟按下事件的生成操作,控制端在更新键值和时间戳的记录后,可以直接基于第二按下事件中的第二时间戳进行预设时长的统计。
在一种可选实施方式中,利用第二按下事件中的第二按键值和第二时间戳,更新在先记录的第一按键值和第一时间戳,包括:如果第二按键包括多个,例如用户同时按下了多个按键,则利用多个第二按下事件中目标按下事件中的目标键值和目标时间戳,更新在先记录的第一按键值和第一时间戳,以基于目标时间戳重新统计预设时长;其中,目标按下事件是与多个第二按键中最后按下的按键对应的按下事件。即如果用户在一定时间内同时执行了多个按键操作,则将用户最后执行的按键操作对应的按键作为有效的目标按键,该目标按键对应的按下事件作为目标按下事件,后续需要判断目标按键是否为长按键。
并且,在确定多个第二按键中的目标按键为长按键后,用户抬起任意按键,即控制端获取到关于任意按键的抬起事件后,可以停止关于目标按键的模拟按下事件的生成与发送操作,相应地,被控端在收到抬起事件后结束关于目标按键值的输入操作。
图3为本公开实施例提供的另一种按键事件处理方法的流程图,用于结合图2对本公开实施例进行示例性说明,但不应理解为对本公开实施例的具体限定。如图3所示,控制端可以根据用户按键操作,生成按键事件(包括按下事件和抬起事件),并存储在键盘设备文件中,然后控制端可以从键盘设备文件中获取当前按下事件数据,包括键值信息(即键值和时间戳),并更新记录的键值和时间戳,同时可以调用定时器读取当前更新记录的按下键值以及对应的时间戳,并基于时间戳进行预设时长的统计,以判断当前按下键值对应的按键是否为长按键;如果是,则利用按下事件模拟软件,基于预设时长的结束时刻,按照预设时间间隔执行关于当前按下键值的模拟按下事件的生成;模拟按下事件生成后,可以基于传输按键事件对应的网络Socket句柄,将模拟按下事件数据写入,并传输至被控端;如果确定当前按下键值对应的按键不是长按键,则利用定时器基于下次新记录的时间戳,再次判断新记录的键值对应的按键是否为长按键。重复执行前述操作,从而实现在被控端连续输入多个相同键值。
图4为本公开实施例提供的一种关于键值和时间戳的更新记录的方法流程图,如图4所示,控制端可以从键盘设备文件中不断获取按键事件数据,然后根据当前获取的按键事件中的类型数据确定当前按键事件是否为按下事件,如果是,则可以利用当前获取的按下事件中的键值和时间戳更新在先已经记录的键值和时间戳,其中,控制端还可以进行键值的比对操作,如果键值相同,则可以只更新时间戳;如果不是,即当前按键事件可能是抬起事件,则可以清除在先已经记录的键值和时间戳,意味着在先键值对应的模拟按下事件的生成操作可以结束,进而相应的键值输入操作在被控端中可以结束。
图5为本公开实施例提供的一种关于确定长按键的方法流程图,用于对本公开实施例进一步进行示例性说明,但不应理解为对本公开实施例的具体限定。如图5所示,控制端可以从键盘设备文件中获取关于特定按键的按下事件数据,然后根据按下事件数据中的键值数据确定键值是否为空,如果为空,则表示按下事件对应的用户按键操作无效,可以结束流程;如果键值不为空,则继续判断按下事件数据中的键值和已经确定为长按键的键值是否相等,如果相等,则表示当前需要继续在被控端输入长按键的键值,控制端可以继续向被控端发送该长按键的按下事件;如果按下事件数据中的键值和已经确定为长按键的键值不相等,则可以清除在先记录的长按键的键值和时间戳,同时记录按下事件数据中的键值和时间戳,基于按键事件数据中的时间戳统计预设时长,例如500ms,在时长统计过程中,可以判断系统的实时时间戳和按下事件数据中的时间戳的差值是否大于500ms,如果大于500ms,且在该期间内未获取到关于特定按键的抬起事件数据,则可以确定该特定按键为新的长按键;如果在小于500ms的期间内获取到关于特定按键的抬起事件数据,则可以确定该特定按键不是长按键。
在本公开实施例中,控制端获与被控端建立通讯连接,取用户输入的关于第一按键的第一按下事件后,判断在基于第一按下事件中的第一时间戳统计的预设时长内是否收到关于第一按键的抬起事件,如果未收到,则说明第一按键为长按键(即用户长时间地按压该键),向被控端发送第一按下事件,并基于预设时长的结束时刻,按照预设时间间隔生成关于第一按键的第一模拟按下事件,然后向被控端发送第一模拟按下事件,被控端直接基于接收的第一按下事件和第一模拟按下事件,实现第一按键值的连续输入,避免了现有方案中因通讯网络质量不稳定引起的抬起事件传输延迟,使得被控端误将按键单击操作判断为长按操作(或者连击操作),优化了控制端和被控端之间的按键事件的传输方式以及传输效果,提高了控制端和被控端交互过程中针对按键长按操作的判断准确性,提高了被控端中键值连续性输入的准确性,改善了无线键盘用户的使用体验,尤其是在通讯网络环境差的场景下,本公开实施例的方案优势尤为明显。并且,本公开实施例的技术方案与现有被控端中输入系统的匹配度很高,整体修改量很小,便于系统的集成。
图6为本公开实施例提供的一种按键事件处理装置的结构示意图,该装置可以采用软件和/或硬件实现,并可集成在控制端,该控制端可以是任意能够与被控端交互的电子设备,例如控制端是连接有实体键盘的无线屏设备,被控端是移动终端,具体地,可以根据实际应用场景而定,本公开实施例不作具体限定。
如图6所示,本公开实施例提供的按键事件处理装置600可以包括通讯连接建立模块601、第一按下事件获取模块602、第一预设时长统计模块603、事件发送与模拟模块604和第一模拟按下事件发送模块605,其中:
通讯连接建立模块601,用于与被控端建立通讯连接;
第一按下事件获取模块602,用于获取用户输入的关于第一按键的第一按下事件;
第一预设时长统计模块603,用于向被控端发送第一按下事件,并基于第一按下事件中的第一时间戳,统计预设时长;
事件发送与模拟模块604,用于响应于在预设时长内未获取到关于第一按键的第一抬起事件,向被控端发送第一按下事件,并基于预设时长的结束时刻,按照预设时间间隔生成关于第一按键的第一模拟按下事件;
第一模拟按下事件发送模块605,用于向被控端发送第一模拟按下事件;
其中,被控端用于基于第一按下事件和第一模拟按下事件,执行第一按键值的连续输入操作。
可选地,被控端中的模拟按下事件的生成功能被预先禁止。
可选地,本公开实施例提供的按键事件处理装置600还包括:
第一模拟按下事件生成结束模块,用于响应于在预设时长之后获取到关于第一按键的第一抬起事件,结束第一模拟按下事件的生成;
第一抬起事件发送模块,用于向被控端发送第一抬起事件;其中,第一抬起事件用于指示被控端结束第一按键值的输入。
可选地,本公开实施例提供的按键事件处理装置600还包括:
按键值和时间戳记录模块,用于记录第一按下事件中的第一按键值和第一时间戳;
按键值和时间戳更新模块,用于响应于获取到关于第二按键的第二按下事件,利用第二按下事件中的第二按键值和第二时间戳,更新在先记录的第一按键值和第一时间戳,以基于第二时间戳重新统计预设时长。
可选地,本公开实施例提供的按键事件处理装置600还包括:
第二按下事件接收模块,用于在基于第一时间戳统计的预设时长之后,获取关于第二按键的第二按下事件;
第二模拟按下事件生成结束模块,用于响应于获取到关于第二按键的第二按下事件,结束第一模拟按下事件的生成。
可选地,按键值和时间戳更新模块,具体用于:
响应于获取到关于第二按键的第二按下事件,如果第二按键包括多个,则利用多个第二按下事件中目标按下事件中的目标键值和目标时间戳,更新在先记录的第一按键值和第一时间戳,以基于目标时间戳重新统计预设时长;
其中,目标按下事件是与多个第二按键中最后按下的按键对应的按下事件。
可选地,通讯连接建立模块601具体用于:
基于无线网络,与被控端建立通讯连接,并显示被控端的界面内容。
本公开实施例所提供的按键事件处理装置可执行本公开实施例所提供的任意按键事件处理方法,具备执行方法相应的功能模块和有益效果。本公开装置实施例中未详尽描述的内容可以参考本公开任意方法实施例中的描述。
图7为本公开实施例提供的一种电子设备的结构示意图,用于对实现本公开实施例提供的按键事件处理方法的电子设备进行示例性说明。本公开实施例中的电子设备可以包括但不限于诸如移动电话、笔记本电脑、数字广播接收器、PDA(个人数字助理)、PAD(平板电脑)、PMP(便携式多媒体播放器)、车载终端(例如车载导航终端)等等的移动终端以及诸如数字TV、台式计算机、智能家居设备、可穿戴电子设备、服务器等等的固定终端。图7示出的电子设备仅仅是一个示例,不应对本公开实施例的功能和占用范围带来任何限制。
如图7所示,电子设备700包括一个或多个处理器701和存储器702。
处理器701可以是中央处理单元(CPU)或者具有数据处理能力和/或指令执行能力的其他形式的处理单元,并且可以控制电子设备700中的其他组件以执行期望的功能。
存储器702可以包括一个或多个计算机程序产品,计算机程序产品可以包括各种形式的计算机可读存储介质,例如易失性存储器和/或非易失性存储器。易失性存储器例如可以包括随机存取存储器(RAM)和/或高速缓冲存储器(cache)等。非易失性存储器例如可以包括只读存储器(ROM)、硬盘、闪存等。在计算机可读存储介质上可以存储一个或多个计算机程序指令,处理器701可以运行程序指令,以实现本公开实施例提供的按键事件处理方法,还可以实现其他期望的功能。在计算机可读存储介质中还可以存储诸如输入信号、信号分量、噪声分量等各种内容。
其中,本公开实施例提供的按键事件处理方法可以包括:与被控端建立通讯连接;获取用户输入的关于第一按键的第一按下事件;基于第一按下事件中的第一时间戳,统计预设时长;响应于在预设时长内未获取到关于第一按键的第一抬起事件,向被控端发送第一按下事件,并基于预设时长的结束时刻,按照预设时间间隔生成关于第一按键的第一模拟按下事件;向被控端发送第一模拟按下事件。应当理解,电子设备700还可以执行本公开方法实施例提供的其他可选实施方案。
在一个示例中,电子设备700还可以包括:输入装置703和输出装置704,这些组件通过总线系统和/或其他形式的连接机构(未示出)互连。
此外,该输入装置703还可以包括例如键盘、鼠标等等。
该输出装置704可以向外部输出各种信息,包括确定出的距离信息、方向信息等。该输出装置704可以包括例如显示器、扬声器、打印机、以及通信网络及其所连接的远程输出设备等等。
当然,为了简化,图7中仅示出了该电子设备700中与本公开有关的组件中的一些,省略了诸如总线、输入/输出接口等等的组件。除此之外,根据具体应用情况,电子设备700还可以包括任何其他适当的组件。
除了上述方法和设备以外,本公开实施例还提供一种计算机程序产品,其包括计算机程序或计算机程序指令,计算机程序或计算机程序指令在被计算设备执行时使得计算设备实现本公开实施例所提供的任意按键事件处理方法。
计算机程序产品可以以一种或多种程序设计语言的任意组合来编写用于执行本公开实施例操作的程序代码,程序设计语言包括面向对象的程序设计语言,诸如Java、C++等,还包括常规的过程式程序设计语言,诸如“C”语言或类似的程序设计语言。程序代码可以完全地在用户电子设备上执行、部分地在用户电子设备上执行、作为一个独立的软件包执行、部分在用户电子设备上且部分在远程电子设备上执行、或者完全在远程电子设备上执行。
此外,本公开实施例还可以提供一种计算机可读存储介质,其上存储有计算机程序指令,计算机程序指令在被计算设备执行时使得计算设备实现本公开实施例所提供的任意按键事件处理方法。
其中,本公开实施例提供的按键事件处理方法可以包括:与被控端建立通讯连接;获取用户输入的关于第一按键的第一按下事件;基于第一按下事件中的第一时间戳,统计预设时长;响应于在预设时长内未获取到关于第一按键的第一抬起事件,向被控端发送第一按下事件,并基于预设时长的结束时刻,按照预设时间间隔生成关于第一按键的第一模拟按下事件;向被控端发送第一模拟按下事件。应当理解,计算机程序指令在被计算设备执行时,还可以使得计算设备实现本公开方法实施例提供的其他可选实施方案。
计算机可读存储介质可以采用一个或多个可读介质的任意组合。可读介质可以是可读信号介质或者可读存储介质。可读存储介质例如可以包括但不限于电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。可读存储介质的更具体的例子(非穷举的列表)包括:具有一个或多个导线的电连接、便携式盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、光纤、便携式紧凑盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。
需要说明的是,在本文中,诸如“第一”和“第二”等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括要素的过程、方法、物品或者设备中还存在另外的相同要素。
以上仅是本公开的具体实施方式,使本领域技术人员能够理解或实现本公开。对这些实施例的多种修改对本领域的技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本公开的精神或范围的情况下,在其它实施例中实现。因此,本公开将不会被限制于本文的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。