发明内容
本发明鉴于现有技术的以上情况作出,用以克服或缓解现有技术的以上问题,至少提供一种有益的选择。
根据本发明的一个方面,提供了一种屏幕驱动方法,用于具有多个屏幕的装置,其特征在于,包括:创建显示设备信息,为所述多个屏幕中的各屏幕设置专有屏幕标识;检测屏幕事件,确定屏幕事件所发生屏幕的屏幕信息;根据屏幕信息,确定屏幕事件所发生屏幕是否是第三屏幕;在屏幕事件所发生屏幕是第三屏幕时,根据第三屏幕的专有屏幕标识进行屏幕事件响应。
根据本发明的另一方面,提供了一种屏幕驱动设备,用于具有多个屏幕的装置,包括:显示设备信息创建单元,用于创建显示设备信息,为所述多个屏幕中的各屏幕设置专有屏幕标识;屏幕事件检测单元,用于检测屏幕事件,确定屏幕事件所发生屏幕的屏幕信息;第三屏幕判断单元,用于根据屏幕信息,确定屏幕事件所发生屏幕是否是第三屏幕;屏幕事件响应单元,用于在屏幕事件所发生屏幕是第三屏幕时,根据第三屏幕的专有屏幕标识进行屏幕事件响应。
根据一种实施方式,所述显示设备信息创建单元为所述多个屏幕中的各屏幕设置专有屏幕标识包括:获得屏幕事件所发生屏幕的屏幕信息;将屏幕信息设置到本地框架层的用于将屏幕与屏幕事件进行绑定的对象;确定屏幕事件所发生屏幕是否是第三屏幕;在确定出屏幕事件所发生屏幕是第三屏幕时,将第三屏幕专有的屏幕标识设置到用于将屏幕与屏幕事件进行绑定的对象。
根据一种实施方式,所述具有多个屏幕的装置使用安卓系统,所述用于将屏幕与屏幕事件进行绑定的对象是本地框架层的视图对象,通过将所述视图对象的屏幕标识参数设置为第三屏幕专有的屏幕标识而将所述第三屏幕专有的屏幕标识设置到所述视图对象。
根据一种实施方式,所述具有多个屏幕的装置使用安卓系统,所述屏幕事件为触摸事件,所述屏幕事件响应单元进行屏幕事件响应包括:基于视图对象对应的屏幕标识找到发生触摸事件所在屏幕的目标焦点窗口和焦点应用;以及通过调用函数将该触摸事件分发到所述焦点应用。
根据一种实施方式,所述具有多个屏幕的装置使用安卓系统,所述屏幕事件为按键事件,所述屏幕事件响应单元进行屏幕事件响应包括:进行拦截判断,即判断是否需要向应用层分发;若是,根据所述专有屏幕标识,确定按键事件所在屏幕的目标焦点窗口;以及应用层分发该按键事件。
根据一种实施方式,所述向应用层分发该按键事件,包括:通过事件函数构造描述所述按键事件的通知;将所述按键事件的通知通过输入通道写入服务端接口后唤醒应用的接口,通过应用的接口将所述按键事件向应用层分发。
根据本发明的一个方面,还提供了一种电子设备,包括:处理器;用于存储所述处理器可执行指令的存储器;其中,所述处理器被配置为执行所述指令,以实现本发明所述的方法。
根据本发明的另一个方面,提供了一种计算机可读存储介质,所述可读存储介质上存储设备控制程序,当所述设备控制程序被处理器执行时,可实现本发明所述的屏幕驱动方法。
根据本发明的又一个方面,提供了一种计算机程序产品(例如包括计算机程序),所述计算机程序被处理器执行时,可实现本发明所述的屏幕驱动方法。
依据本发明的技术方案,由于能够准确找到屏幕的标识,并根据屏幕的标识,确定发生屏幕事件的屏幕,因而能响应正确的触摸坐标点。依据本发明的技术方案,对安卓系统的变化改变很小,升级的成本极低。
具体实施方式
下面结合附图对本发明的具体实施方式进行详细的描述。这些实施方式都是示例性的,不是对本发明的保护范围的限制。
图1是示出了依据本发明的一种实施方式的屏幕驱动方法的示意性流程图。该实施方式的方法应用于具有多个屏幕的装置(系统) 的驱动。应用该方法的装置的驱动系统包括应用层、系统层(framework层)、本地框架层(Native层)。
如图1所示,首先在步骤S100创建显示设备信息,为包括第三屏幕在内的多个屏幕中的各屏幕设置专有的屏幕标识(屏幕ID或 DisplayID)。这个步骤可以在该具有多个屏幕的装置的驱动系统 (例如车载系统)开机时,或者各屏幕启动或重启时进行。
图2是示出了依据本发明的一种实施方式的创建显示设备信息的方法的示意性流程图。如图2所示,首先,在步骤S110,在车机启动时,屏幕显示服务(DisplayManagerService)启动,从驱动得到屏幕信息。屏幕信息包括屏幕名称(Name)、以及屏幕的高度、宽度、角度等。在系统为安卓系统时,驱动是Android内核的概念,是指屏幕驱动。屏幕驱动有一个设备节点,通过读取设备节点里面的数据就可以获取到屏幕的信息,即屏幕信息。然后在步骤S120,将屏幕信息设置到Native层的用于将屏幕与屏幕事件进行绑定的对象。在安卓系统的情况下,为ViewPort对象(视图对象)。根据一种实施方式,可以包括以下的步骤:
(1)将所获得屏幕信息转换成系统层的屏幕信息;
(2)根据得到系统层的屏幕信息将屏幕信息的内容赋值给系统层ViewPort对象,系统层ViewPort对象包括屏幕名称、屏幕的高度、宽度、角度等;
(3)将系统层的ViewPort对象设置到本地框架层(Native层);
(4)Native层将系统层设置下来的ViewPort进行转换,转换成 Native层的ViewPort对象。
然后在步骤S130,根据屏幕信息,判断是否是第三屏幕。例如可以根据屏幕信息中的屏幕名称,利用用于建立屏幕名称、屏幕编号之间的对应表,来确定是否是第三屏幕。表1示出了示例性的表。
表1
屏幕名 |
屏幕编号 |
Name 1 |
第一屏幕 |
Name 2 |
第二屏幕 |
Name 3 |
第三屏幕 |
Name 4 |
第四屏幕 |
… |
… |
若是第三屏幕,则在步骤S140,根据用于建立的屏幕编号和 ViewPort对象之间的对应表,设置Native层的ViewPort对象,为其设置第三屏幕专有的屏幕标识。
示意性的对应表如下面的表2所示。
表2
屏幕编号 |
ViewPort的DisplayID |
第一屏幕 |
01 |
第二屏幕 |
02 |
第三屏幕 |
03 |
… |
… |
为第三屏幕设置第三屏专有屏幕标识,即对ViewPort进行赋值,将Native层的ViewPort对象的参数DisplayID设置为第三屏幕的屏幕标识,例如03。
对于更多屏(例如第4屏、第5屏)的情况,可以进行类似的设置。本领域的技术人员可以理解,表1和表2可以合并,并且步骤 S130和步骤S140也可以合并。
回到图1,在步骤S200检测屏幕事件,获得屏幕事件所涉及的屏幕信息,例如屏幕名称(Name)。屏幕事件例如可以是屏幕被触摸的触摸事件、鼠标点击事件或者按键输入事件等。下面以触摸事件为例进行介绍。每一个屏幕的尺寸大小不一样,触摸的区域就不同,范围也就不一样,因而可以利用这一点来检测触摸发生,并获知被触摸屏幕的屏幕名称。可以同时检测触摸发生的时间和触点,还可以检查的是单触还是多触。检测触摸事件可以采用现在知道和将来获知的各种方法进行。例如在安卓系统的情况下,可以由Input ManageService线程来检测触摸事件,检测到触摸事件之后,随即唤醒Input Dispatcher线程,Input Dispatcher线程可以获得被触摸的屏幕的屏幕名称。
然后在步骤S300中,根据在步骤S200获得的屏幕信息(例如屏幕名称),查找对应表(表1和表2),确定对应的Native层的 ViewPort。例如,可以通过查找对应表,确定对应的Native层的 ViewPort中的DisplayID,根据该DisplayID,找到与之对应的Native 层的ViewPort,从而确定出与被触摸的屏幕对应的Native层的 ViewPort对象。由于对应表中具有第三屏幕的专有屏幕标识 (DisplayID),因而当第三屏幕被触摸时,能够找到具有该第三屏幕对应的DisplayID的ViewPort对象。
最后在步骤S400中,利用所获得的Viewport对象,进行屏幕事件的处理。
图3示出了依据本发明的一种实施方式对按键事件的处理。如图3所示,根据一种实施方式,当屏幕事件是按键事件时,首先在步骤S410进行拦截判断,即判断是否需要向应用层分发。有些按键事件在系统层可以直接处理或者响应(这种拦截),有些需要向应用层分发(这种不拦截)。在一种实施方式中,可将按键事件传到 PhoneWindowManager(framework层的服务),PhoneWindow Manager中的InterceptKeyBeforeDispatching函数判断按键事件是否需要拦截,如果不需拦截,则在步骤S420,确定按键事件所在屏幕的目标焦点窗口。根据一种实施方式,在安卓系统的情况下,可以通过FindFocusedWindowTargetsLocked函数基于ViewPort对象对应的DisplayID找到发生按键事件所在屏幕的目标焦点窗口。然后,如果找到了按键事件所在的屏幕的焦点目标窗口(例如Find FocusedWindowTargetsLocked函数返回结果为true),则在S430中,向应用层分发该按键事件。在一种实施方式中,向应用层分发该按键事件包括通过事件函数构造描述该按键事件的通知以及将所述按键事件的通知通过输入通道写入服务端接口后唤醒应用的接口,通过应用的接口将所述按键事件向应用层分发。
通过事件函数构造描述该按键事件的通知例如可以调用 Dispatch EventLocked函数(事件函数),DispatchEventLocked函数进而可以调用PublishKeyEvent函数,PublishKeyEvent函数中构造描述输入事件信息的InputMessage。
将所述按键事件的通知通过输入通道写入服务端接口后唤醒应用的接口,通过应用的接口将所述按键事件向应用层分发例如通过 InputChannel通道(输入通道)向按键事件服务端(server端)的插件(socket,服务端接口)写入以唤醒应用程序(APP)进程的客户端(client)的插件,从而按键事件成功从InputDispatcher发送到了第三屏幕上所运行的应用(APP),也就是焦点窗口。
根据一种实施方式,如果是触摸事件,则首先确定触摸事件所在屏幕的目标焦点窗口和焦点应用。在安卓系统的情况下,可以调用Dispatch Motion Locked处理,其可以通过FindTouchedWindow TargetsLocked函数基于ViewPort对象对应的DisplayID找到发生触摸事件所在屏幕的目标焦点窗口和焦点应用。如果找到了触摸事件所在的屏幕的焦点目标窗口和焦点应用,例如 findFocusedWindowTargetsLocked函数返回结果为true,表示找到了触摸事件所在的屏幕的焦点目标窗口和焦点应用,则向应用层进行分发。例如调用DispatchEventLocked函数分发该触摸事件。 DispatchEventLocked函数调用PublishMotionEvent函数, PublishMotionEvent函数中构造描述输入事件信息的InputMessage并通过InputChannel通道向触摸事件服务端(server端)的插件写入用以唤醒应用(APP)进程的客户端(client端)的插件,从而将触摸事件从InputDispatcher发送到了应用。
进行分发也可以采用现在已知的和未来知悉的各种方法进行。
依据本发明的技术方案,由于能够准确找到屏幕的标识,并根据屏幕的标识,确定发生屏幕事件的屏幕,因而能响应正确的触摸坐标点。依据本发明的技术方案,对安卓系统的变化改变很小,升级的成本极低。
根据一种实施方式,本发明的方法在步骤S200之后,还包括判断是否屏幕事件不予处理的步骤。例如在InputDispatcher线程被唤醒之后,在屏幕事件发生后,调用函数dispatchOnceInner Locked处理事件,此函数会判断是否丢掉某些事件(即对该事件不予处理)。
图4是示出了依据本发明的一种实施方式的屏幕驱动装置的示意性方框图。
如图4所示,根据本发明的一种实施方式的屏幕驱动设备,用于具有多个屏幕的装置,其特征在于,包括:
显示设备信息创建单元100,用于创建显示设备信息,为所述多个屏幕中的各屏幕设置专有屏幕标识;
屏幕事件检测单元200,用于检测屏幕事件,确定屏幕事件所发生屏幕的屏幕信息;
第三屏幕判断单元300,用于根据屏幕信息,确定屏幕事件所发生屏幕是否是第三屏幕;
屏幕事件响应单元400,用于在屏幕事件所发生屏幕是第三屏幕时,根据第三屏幕的专有屏幕标识进行屏幕事件响应。
根据一种实施方式,显示设备信息创建单元100为所述多个屏幕中的各屏幕设置专有屏幕标识包括:获得屏幕事件所发生屏幕的屏幕信息;将屏幕信息设置到本地框架层的用于将屏幕与屏幕事件进行绑定的对象;确定屏幕事件所发生屏幕是否是第三屏幕;在确定出屏幕事件所发生屏幕是第三屏幕时,将第三屏幕专有的屏幕标识设置到用于将屏幕与屏幕事件进行绑定的对象。
根据一种实施方式,所述具有多个屏幕的装置使用安卓系统,所述用于将屏幕与屏幕事件进行绑定的对象是本地框架层的视图对象,通过将所述视图对象的屏幕标识参数设置为第三屏幕专有的屏幕标识而将所述第三屏幕专有的屏幕标识设置到所述视图对象。
根据一种实施方式,所述具有多个屏幕的装置使用安卓系统,所述屏幕事件为触摸事件,所述屏幕事件响应单元400进行屏幕事件响应包括:基于视图对象对应的屏幕标识找到发生触摸事件所在屏幕的目标焦点窗口和焦点应用;以及通过调用函数将该触摸事件分发到所述焦点应用。
根据一种实施方式,该具有多个屏幕的装置使用安卓系统,所述屏幕事件为按键事件,屏幕事件响应单元400进行屏幕事件响应包括:进行拦截判断,即判断是否需要向应用层分发;若是,根据所述专有屏幕标识,确定按键事件所在屏幕的目标焦点窗口;以及向应用层分发该按键事件。
根据一种实施方式,所述向应用层分发该按键事件,包括:通过事件函数构造描述所述按键事件的通知;将所述按键事件的通知通过输入通道写入服务端接口后唤醒应用的接口,通过应用的接口将所述按键事件向应用层分发。
该屏幕驱动设备还可以包括判断是否屏幕事件不予处理的单元。
除非上下文特别指出,否则对方法步骤的描述顺序,不代表其实际执行的顺序。
本领域的技术人员应该理解,上述的各装置可以由专门的硬件来实现,例如现场可编程门阵列、单片机、或微芯片等,或者也可以通过软件结合硬件的方式来实现。
本发明还提供了一种电子设备,包括:处理器;用于存储所述处理器可执行指令的存储器;其中,所述处理器被配置为执行所述指令,以实现本发明的方法。
本发明还涉及一种计算机软件,该计算机软件在被计算装置 (例如单片机、电脑、CPU等)执行时,可以实现本发明的方法。
本发明还涉及一种计算机软件存储装置,例如硬盘、软盘、闪存等,该计算机软件存储装置存储有上述的计算机软件。
本发明对方法的说明可以用于理解对装置和设备的说明,对装置和设备的说明也可以用于理解本发明的方法。
以上的说明仅仅是示意性的,不是对本发明的保护范围的限制,在本发明的权利要求范围内的任何改变、替换均在本发明的保护范围内。