具体实施方式
下面将结合本发明实施例中附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。通常在此处附图中描述和示出的本发明实施例的组件可以以各种不同的配置来布置和设计。因此,以下对在附图中提供的本发明的实施例的详细描述并非旨在限制要求保护的本发明的范围,而是仅仅表示本发明的选定实施例。基于本发明的实施例,本领域技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本发明保护的范围。
应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步定义和解释。同时,在本发明的描述中,术语“第一”、“第二”等仅用于区分描述,而不能理解为指示或暗示相对重要性。
如图1所示,是所述电子终端100的方框示意图。所述电子终端100包括投屏控制装置110、存储器111、存储控制器112、处理器113、外设接口114、输入输出单元115、显示单元116。本领域普通技术人员可以理解,图1所示的结构仅为示意,其并不对电子终端100的结构造成限定。例如,电子终端100还可包括比图1中所示更多或者更少的组件,或者具有与图1所示不同的配置。
本实施例中,所述电子终端100可以是电视机等显示设备。
所述存储器111、存储控制器112、处理器113、外设接口114、输入输出单元115及显示单元116各元件相互之间直接或间接地电性连接,以实现数据的传输或交互。例如,这些元件相互之间可通过一条或多条通讯总线或信号线实现电性连接。所述投屏控制装置110包括至少一个可以软件或固件(Firmware)的形式存储于所述存储器111中或固化在所述电子终端100的操作***(Operating System,OS)中的软件功能模块。所述处理器113用于执行存储器中存储的可执行模块,例如所述投屏控制装置110包括的软件功能模块或计算机程序。
其中,所述存储器111可以是,但不限于,随机存取存储器(Random AccessMemory,RAM),只读存储器(Read Only Memory,ROM),可编程只读存储器(ProgrammableRead-Only Memory,PROM),可擦除只读存储器(Erasable Programmable Read-OnlyMemory,EPROM),电可擦除只读存储器(Electric Erasable Programmable Read-OnlyMemory,EEPROM)等。其中,存储器111用于存储程序,所述处理器113在接收到执行指令后,执行所述程序,本发明实施例任一实施例揭示的过程定义的电子终端100所执行的方法可以应用于处理器113中,或者由处理器113实现。
所述处理器113可能是一种集成电路芯片,具有信号的处理能力。上述的处理器113可以是通用处理器,包括中央处理器(Central Processing Unit,简称CPU)、网络处理器(Network Processor,简称NP)等;还可以是数字信号处理器(DSP)、专用集成电路(ASIC)、现场可编程门阵列(FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。可以实现或者执行本发明实施例中的公开的各方法、步骤及逻辑框图。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。
所述外设接口114将各种输入/输入装置耦合至处理器113以及存储器111。在一些实施例中,外设接口114,处理器113以及存储控制器112可以在单个芯片中实现。在其他一些实例中,他们可以分别由独立的芯片实现。
所述输入输出单元115用于提供给用户输入数据。所述输入输出单元115可以是,但不限于,鼠标和键盘等。
所述显示单元116在所述电子终端100与用户之间提供一个交互界面(例如用户操作界面)或用于显示图像数据给用户参考。在本实施例中,所述显示单元可以是液晶显示器或触控显示器。若为触控显示器,其可为支持单点和多点触控操作的电容式触控屏或电阻式触控屏等。支持单点和多点触控操作是指触控显示器能感应到来自该触控显示器上一个或多个位置处同时产生的触控操作,并将该感应到的触控操作交由处理器进行计算和处理。
本实施例中,所述电子终端中存储有悬浮面板对象,所述悬浮面板对象包括属性参数,所述属性参数包括默认不获取页面焦点的标志位。下面对悬浮面板对象初始化生成进行详细描述。
首先,通过WindowManager.LayoutParams类来定义一个悬浮面板的设置对象mMenuLayoutParams,通过WindowManager.LayoutParams类中的构造函数来实例化得到一个mMenuLayoutParams对象,即所述悬浮面板对象。
其次,将悬浮面板对象mMenuLayoutParams的type属性设置为WindowManager.LayoutParams.TYPE_PHONE类型,用于表示用于显示投屏的悬浮面板在视图中的层级关系。其中,将type属性设设置为TYPE_PHONE类型,以使悬浮面板是在应用页面(Activity)的上层,使悬浮面板可以在多个页面之上进行显示。
再次,将悬浮面板对象mMenuLayoutParams的flag属性进行设置。其中,flag属性用于描述mMenuLayoutParams的功能特性,不同的功能特性属性的设置会使得mMenuLayoutParams对象具备有不同的行为特征。本实施例中,为所述悬浮面板对象mMenuLayoutParams设置了两个属性:
WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE和WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS。所述WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE属性表示悬浮面板不能获取页面,从而避免悬浮面板一直保持能够获取到页面焦点的状态,会导致悬浮面板以外的其他页面元素无法获取到页面焦点,从而导致其它页面的操作失效,使得电子终端的各个程序运行异常。其次,所述WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS属性的设置表示悬浮面板的显示不受电子终端的屏幕大小的控制,也就是说悬浮面板的显示位置可以在屏幕的任意位置,包括可以在屏幕的外边缘进行显示。该WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS属性的设置可以实现悬浮面板在进行动画特效显示的时候使用。例如,悬浮面板展开的时候是可以从底部屏幕外逐步移动到屏幕内部的,如果没有设置该属性那么该动画的无法实现。
本实施例中,还需要对所述悬浮面板进行包裹设计,传统的方案中会使用***的标准控件来实现整个悬浮面板的容器,这种方案在本方案中无法使用的原因是因为是使用的***的容器来包裹控制面板,这样容器内部的按键事件等信息是无法被拦截和处理的,因此会导致控制面板无法拦截处理***的返回按键信息。因此,为了能够让控制面板能够处理***的页面焦点信息,例如,返回按键信息,本实施例中的为悬浮面板使用了新容器SCSettingView,并让该SCSettingView容器继承自***容器RelativeLayout。因此,本实施例中的SCSettingView容器具备了***容器RelativeLayout的所有功能特性。然后,所述SCSettingView容器内部复写的dispatchKeyEvent方法,该方法是按键分发函数。因此,在所述SCSettingView容器内部复写的dispatchKeyEvent方法来实现dispatchKeyEvent方法。因此,本实施例中的悬浮面板的容器SCSettingView可以拦截***的按键事件分发,这样就使得容器SCSettingView能够拦截***的返回按键信息。
为了能够将本实施例中的SCSettingView容器拦截的返回按键信息进行对外暴露,所述SCSettingView容器还设置有接口来对容器外界视图暴露按键信息,具体的接口设计如下所示:
public interface IOnBackPressed{
void onBackPressed();
}
该接口的名称是IOnBackPressed,接口内部仅设置一个函数onBackPressed,该函数很简单没有输入参数也没有输出参数,当容器拦截到***的页面焦点后就可以通过接口函数onBackPressed来将该消息分发到容器的外界,就可以使得电子终端中对应的处理单元处理该页面焦点。
请参阅图2,是本发明较佳实施例提供的应用于图1所示的电子终端的投屏控制方法的流程图。下面将对图2所示的具体流程进行详细阐述。
步骤S101,接收到投屏请求后,执行悬浮面板对象控制电子终端显示所述投屏请求对应的投屏数据。
所述电子终端中存储有悬浮面板对象,所述悬浮面板对象包括属性参数,所述属性参数包括默认不获取页面焦点的标志位。
本实施例中,所述投屏数据显示在所述悬浮面板对象对应形成的悬浮面板上。具体地,由于悬浮面板对象mMenuLayoutParams的type属性设置为WindowManager.LayoutParams.TYPE_PHONE类型,因此,所述悬浮面板是在应用页面(Activity)的上层,使悬浮面板可以在多个页面之上进行显示。
本实施例中,在电子终端中未显示投屏时,所述默认不获取页面焦点的标志位可以使悬浮面板对象不能拦截页面焦点。
步骤S102,将所述悬浮面板对象中的默认不获取页面焦点的标志位进行数据清除,以使所述悬浮面板对象能够获取页面焦点。
本实施例中,所述页面焦点包括多种关于控制页面的操作信息。例如,所述电子终端是电视机时,所述页面焦点可以是遥控器的返回操作、音量加减操作等。
本实施例中,由于所述悬浮面板对象的属性参数中包括默认不获取页面焦点的标志位WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE,因此在默认不获取页面焦点的标志位有效的情况悬浮面板对象就无法获取到***焦点。为了使悬浮面板对象能获取页面焦点需要清除默认不获取页面焦点的标志位WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE,以使悬浮面板对象就能够获取到***焦点。
本实施例中,步骤S102可以包括:将所述默认不获取页面焦点的标志位进行取反操作得到辅助清除数据;将所述辅助清除数据与所述属性参数执行按位与操作。通过上述步骤S102的操作可以清除所述属性参数中的默认不获取页面焦点的标志位。
本实施例中,所述悬浮面板对象的属性参数可以保存在flags参数中。本实施例中,flags中的所有参数使用二进制的形式来进行保存的,也就是说每一个属性是一位或几位二进制数来进行描述的。当悬浮面板在显示的时候,悬浮面板对象需要拦截电子终端中执行的页面焦点,例如,返回按键信息。为了清除默认不获取页面焦点的标志位的数据并且保持flags参数中其它属性参数不变,可以通过如下方式实现:
mMenuLayoutParams.flags=mMenuLayoutParams.flags&(~WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE)。
下面详细描述上述的实现算法,并分析其中的实现原理:
首先,获取WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE的二进制数;
然后,对WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE进行按位取反操作:~WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE,通过上述操作后WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE原来是1的变成了0,原来是0的变成了1。
然后与原始的flags数据按照按位与(&)操作,由于1与任意数据“与”后都是1,0与任何数据“与”后都是0,因此就可以将flags中的WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE位的数据清除,以实现清除默认不获取页面焦点的标志位FLAG_NOT_FOCUSABLE的目的。
本实施例中,在执行悬浮面板对象控制电子终端显示所述投屏请求对应的投屏数据时,都清除默认不获取页面焦点的标志位,因此,能够使得投屏显示的悬浮面板能够获取到焦点信息。也就是悬浮面板能够响应电子终端的一些页面焦点,例如,也就可以获取返回按键信。
步骤S103,当所述悬浮面板对象拦截到任一页面焦点时,对正在显示的投屏执行所述页面焦点对应的操作。
在一个实例中,所述电子终端是电视机,所述悬浮面板对象拦截到该电视机对应的遥控器的返回按键操作时,执行返回操作以隐藏悬浮面板。
本实施例中,在所述对正在显示的投屏执行所述页面焦点对应的操作之后,该方法还包括:当所述悬浮面板对象拦截到的页面焦点是退出或返回显示的投屏的操作信息时,将所述悬浮面板对象中的默认不获取页面焦点的标志位进行恢复操作,以防止所述悬浮面板对象获取所述页面焦点。
详细地,将所述默认不获取页面焦点的标志位与所述属性参数执行按位或操作,以恢复所述属性参数中的默认不获取页面焦点的标志位。
在显示悬浮面板的时,已经将默认不获取页面焦点的标志位FLAG_NOT_FOCUSABLE进行了清除操作,当电子终端隐藏悬浮面板时,需要对默认不获取页面焦点的标志位FLAG_NOT_FOCUSABLE进行恢复,否则悬浮面板将一直拦截电子终端的页面焦点,从而导致其他页面无法获取到页面焦点。因此,在悬浮面板被隐藏时,进一步地对默认不获取页面焦点的标志位FLAG_NOT_FOCUSABLE进行重置,可以通过如下方式实现:
mMenuLayoutParams.flags=
mMenuLayoutParams.flags|
WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE。
下面详细描述上述的实现算法,并分析其中的实现原理:
其中,“|”表示按位或操作,mMenuLayoutParams.flags表示原始的flags标志位信息,与FLAG_NOT_FOCUSABLE按位或操作后就可以将FLAG_NOT_FOCUSABLE标志位所在的位置在flag中进行了恢复置1。通过将所述默认不获取页面焦点的标志位FLAG_NOT_FOCUSABLE进行恢复,这样悬浮面板又不能够获取到页面焦点,也就无法对页面焦点进行拦截处理了。
本发明实施例的投屏控制方法,通过在所述悬浮面板对象的属性参数中设置默认不获取页面焦点的标志位,避免在电子终端未显示浮层时误拦截页面焦点;在电子终端中显示投屏时,将默认不获取页面焦点的标志位清除,从而使悬浮面板对象能够拦截到页面焦点,从而有效执行页面焦点对应的操作,使用户能够更方便地操作悬浮面板,提高用户体验。
在其它实施例中,如图3所示,所述投屏控制方法包括不在S201至S205
步骤S201,接收到投屏请求后,执行悬浮面板对象控制电子终端显示所述投屏请求对应的投屏数据。
所述电子终端中存储有悬浮面板对象,所述悬浮面板对象包括属性参数,所述属性参数包括默认不获取页面焦点的标志位。
步骤S202,将所述悬浮面板对象中的默认不获取页面焦点的标志位进行数据清除,以使所述悬浮面板对象能够获取页面焦点。
本实施例中的步骤S201及S202与前一方法实施例中的步骤S101及S102相似,关于本实施例中的步骤S201及S202可以参考上述方法实施例中的描述,在此不再赘述。
步骤S203,在执行悬浮面板对象控制显示投屏请求对应的投屏数据之后,启动监听函数对显示的投屏的进行状态监听。
步骤S204,当所述悬浮面板对象拦截到返回按键时,对正在显示的投屏执行所述隐藏操作。
步骤S205,当所述监听函数监听到所述显示的投屏不可见后,移除所述显示的投屏对应的悬浮面板。
由于悬浮面板的隐藏是一个动画过程,本实施例中的方法可以在悬浮面板不可见时,通过监听所述悬浮面板对应的动画状态以监听所述悬浮面板是否被隐藏。为了捕获控制面板的不可见状态可以对悬浮面板的隐藏动画设置一个动画监听消息。具体地,可以通过调用addListener(newAnimator.AnimatorListener())方法来实现动画面板的动画监听,该***中有一个接口函数onAnimationEnd,该函数会在动画结束的时候会被回调,这样我们就可以在onAnimationEnd该函数中实现隐藏后需要执行的操作。
在一个实例中,可以通过调用android***提供的removeView方法将悬浮面板移除,从而将悬浮面板在内存中进行释放。
步骤S206,将所述悬浮面板对象中的默认不获取页面焦点的标志位进行恢复操作,以防止所述悬浮面板对象获取页面焦点。
详细地,将所述默认不获取页面焦点的标志位与所述属性参数执行按位或操作,以恢复所述属性参数中的默认不获取页面焦点的标志位。
在显示悬浮面板的时,已经将默认不获取页面焦点的标志位FLAG_NOT_FOCUSABLE进行了清除操作,当电子终端隐藏悬浮面板时,需要对默认不获取页面焦点的标志位FLAG_NOT_FOCUSABLE进行恢复,否则悬浮面板将一直拦截电子终端的页面焦点,从而导致其他页面无法获取到页面焦点。因此,在悬浮面板被隐藏时,进一步地对默认不获取页面焦点的标志位FLAG_NOT_FOCUSABLE进行重置,可以通过如下方式实现:
mMenuLayoutParams.flags=
mMenuLayoutParams.flags|
WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE。
下面详细描述上述的实现算法,并分析其中的实现原理:
其中,“|”表示按位或操作,mMenuLayoutParams.flags表示原始的flags标志位信息,与FLAG_NOT_FOCUSABLE按位或操作后就可以将FLAG_NOT_FOCUSABLE标志位所在的位置在flag中进行了恢复置1。通过将所述默认不获取页面焦点的标志位FLAG_NOT_FOCUSABLE进行恢复,这样悬浮面板又不能够获取到页面焦点,也就无法对页面焦点进行拦截处理了。
通过在所述悬浮面板被隐藏时,移除所述悬浮面板可以释放所述电子终端的内存,节省使用空间。另外,在悬浮面板显示时,清除所述默认不获取页面焦点的标志位;在悬浮面板隐藏时,恢复默认不获取页面焦点的标志位,可以使悬浮面板能够获取页面焦点的情况下,也不影响其它页面获取页面焦点。
请参阅图4,是本发明较佳实施例提供的图1所示的投屏控制装置110的功能模块示意图。本实施例中的投屏控制装置110的各个模块用于执行上述方法实施例中的步骤。所述投屏控制装置110包括显示模块1101、清除模块1102及执行模块1103。
所述显示模块1101,用于接收到投屏请求后,执行悬浮面板对象控制电子终端显示所述投屏请求对应的投屏数据。
所述清除模块1102,用于将所述悬浮面板对象中的默认不获取页面焦点的标志位进行数据清除,以使所述悬浮面板对象能够获取页面焦点,所述页面焦点包括多种关于控制页面的操作信息。
所述执行模块1103,用于当所述悬浮面板对象拦截到任一页面焦点时,对正在显示的投屏执行所述页面焦点对应的操作。
本实施例中,该装置还包括:恢复模块1104,用于当所述悬浮面板对象拦截到的页面焦点是退出或返回显示的投屏的操作信息时,将所述悬浮面板对象中的默认不获取页面焦点的标志位进行恢复操作,以防止所述悬浮面板对象获取所述页面焦点。
本实施例中,所述装置还包括:监听模块1105及移除模块1106。
所述监听模块1105,用于在执行悬浮面板对象控制显示投屏请求对应的投屏数据之后,启动监听函数对显示的投屏的进行状态监听。
所述移除模块1106,用于当所述监听函数监听到所述显示的投屏不可见后,移除所述显示的投屏对应的悬浮面板。
所述恢复模块1104还用于将所述悬浮面板对象中的默认不获取页面焦点的标志位进行恢复操作,以防止所述悬浮面板对象获取页面焦点。
本发明实施例的投屏控制装置,通过在所述悬浮面板对象的属性参数中设置默认不获取页面焦点的标志位,避免在电子终端未显示浮层时误拦截页面焦点;在电子终端中显示投屏时,将默认不获取页面焦点的标志位清除,从而使悬浮面板对象能够拦截到页面焦点,从而有效执行页面焦点对应的操作,使用户能够更方便地操作悬浮面板,提高用户体验。
本发明实施例提供一种可读存储介质,其上存储有计算机程序,所述计算机程序在执行时实现上述实施例提供的投屏控制方法。
在本申请所提供的几个实施例中,应该理解到,所揭露的装置和方法,也可以通过其它的方式实现。以上所描述的装置实施例仅仅是示意性的,例如,附图中的流程图和框图显示了根据本发明的多个实施例的装置、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段或代码的一部分,所述模块、程序段或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现方式中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个连续的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或动作的专用的基于硬件的***来实现,或者可以用专用硬件与计算机指令的组合来实现。
另外,在本发明各个实施例中的各功能模块可以集成在一起形成一个独立的部分,也可以是各个模块单独存在,也可以两个或两个以上模块集成形成一个独立的部分。
所述功能如果以软件功能模块的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步定义和解释。
以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以权利要求的保护范围为准。