本发明涉及一种android显示系统动态设置调整的方法,其特征在于系统不需要重启就能改变设备显示方向。通过算法实现系统软件设置和硬件显示方向动态调整,改变显示设备的显示方向,比如横屏竖屏、反向横屏竖屏。
背景技术:
在现有技术中,android显示系统在开机初始化以后就固定下来了,虽然可以通过修改参数来配置,但是仍然需要重启设备来重新初始化整个显示系统,增加设备部署时间或者无法满足需要动态调整的应用场景。
技术实现要素:
本发明提供一种android显示系统动态设置调整的方法,实现基于Android系统设备渲染原理和输入设备匹配机制,根据当前显示系统的方向,通过算法实现系统软件设置和硬件显示方向动态调整,改变显示设备的显示方向,比如横屏竖屏、反向横屏竖屏。
为了达到发明目的,本发明采用如下技术方案:
一种android显示系统动态设置调整的方法,使系统按动态调整显示系统;
所述显示系统动态设置,通过算法实现系统软件设置和硬件显示方向动态调整,改变显示设备的显示方向,比如横屏竖屏、反向横屏竖屏。
一种android显示系统动态设置调整的方法,包括以下步骤:
步骤一,获取当前硬件层渲染设备显示方向和当前设备目标显示信息;
步骤二,使用如下方法计算新的参数:
① 硬件渲染为横屏,软件目标显示参数不变;
② 硬件渲染为竖屏,软件目标为横屏的,参数映射为反向横屏;
③ 硬件渲染为竖屏,软件目标为竖屏的,参数映射为反向竖屏;
④ 硬件渲染为竖屏,软件目标为反向横屏的,参数映射为横屏;
⑤ 硬件渲染为竖屏,软件目标为反向竖屏的,参数映射为竖屏;
⑥ 硬件渲染为反向横屏,软件目标为横屏的,参数映射为反向横屏;
⑦ 硬件渲染为反向横屏,软件目标为竖屏的,参数映射为反向竖屏;
⑧ 硬件渲染为反向横屏,软件目标为反向横屏的,参数映射为横屏;
⑨ 硬件渲染为反向横屏,软件目标为反向竖屏的,参数映射为竖屏;
⑩ 硬件渲染为反向竖屏,软件目标为横屏的,参数映射为横屏;
⑪ 硬件渲染为反向竖屏,软件目标为竖屏的,参数映射为竖屏;
⑫ 硬件渲染为反向竖屏,软件目标为反向横屏的,参数映射为反向横屏;
⑬ 硬件渲染为反向竖屏,软件目标为反向竖屏的,参数映射为反向竖屏。
步骤三,将新的参数传递给WindowManagerService,刷新整个系统window界面。
步骤四, 将新的参数传递给surfaceflinger,更新渲染层方向。
步骤五, 将新的参数传递给InputReader,更新输入设备(例如触摸屏)的匹配方向。
步骤六, 保存新的参数到system.prop,以备在设备重启之后保留设置值。
附图说明
此处所说明的附图用来提供对本发明的进一步理解,构成本发明的一部分,本发明的示意性实施例及其说明用于解释本发明,并不构成对本发明的不当限定。在附图中:
图1为本发明方法的流程框图。
具体实施方式
为了使本发明所要解决的技术问题、技术方案及有益效果更加清楚、明白,以下结合附图和实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅用以解释本发明,并不用于限定本发明。
Linux内核提供了统一的framebuffer显示驱动,设备节点/dev/graphics/fb*或者/dev/fb*,以fb0表示第一个显示屏。Android的HAL层提供了Gralloc,分为fb和gralloc两个设备。设备fb负责打开内核中的framebuffer以及提供post、setSwapInterval等操作,设备gralloc则负责管理帧缓冲区的分配和释放。上层只能通过Gralloc访问帧缓冲区,这样一来就实现了有序的封装保护。由于OpenGL ES是一个通用的函数库,在不同的平台系统上需要被“本地化”——即把它与具体平台上的窗口系统建立起关联,这样才能保证它正常工作。从FramebufferNativeWindow就是将OpenGL ES在Android平台上本地化窗口。OpenGL或者OpenGL ES 更多的只是一个接口协议,实现上既可以采用软件,也能依托于硬件。EGL通过读取egl.cfg配置文件,根据用户的设定来动态加载libagl(软件实现)或者libhgl(硬件实现)。然后上层才可以正常使用各种glXXX接口。SurfaceFlinger中持有一个GraphicPlane成员变量mGraphicPlanes来描述“显示屏”;GraphicPlane类中又包含了一个DisplayHardware对象实例(mHw)。DisplayHardware在初始化时还将调用eglInitialize、eglCreateWindowSurface等接口,并利用EGL完成对OpenGLES环境的搭建。由于本方案的目标是实现动态调整,设备不经过重新启动。所以硬件渲染层并不会在配置新参数以后重新初始化。这样就需要通过系统在软件层面上进行处理,实现新的显示方向。
下面为一个android显示系统动态设置调整的方法:
(1)获取当前硬件层渲染设备显示方向和当前设备目标显示信息。在设备初始化过程中,通过在底层和应用层中添加相关代码,截取设备信息并保存;
(2)根据硬件参数和软件目标参数计算出系统当前需要映射的显示参数。使用如下方法计算新的参数;
①硬件渲染为横屏,软件目标显示参数不变;
②硬件渲染为竖屏,软件目标为横屏的,参数映射为反向横屏;
③硬件渲染为竖屏,软件目标为竖屏的,参数映射为反向竖屏;
④硬件渲染为竖屏,软件目标为反向横屏的,参数映射为横屏;
⑤硬件渲染为竖屏,软件目标为反向竖屏的,参数映射为竖屏;
⑥硬件渲染为反向横屏,软件目标为横屏的,参数映射为反向横屏;
⑦硬件渲染为反向横屏,软件目标为竖屏的,参数映射为反向竖屏;
⑧硬件渲染为反向横屏,软件目标为反向横屏的,参数映射为横屏;
⑨硬件渲染为反向横屏,软件目标为反向竖屏的,参数映射为竖屏;
⑩硬件渲染为反向竖屏,软件目标为横屏的,参数映射为横屏;
⑪硬件渲染为反向竖屏,软件目标为竖屏的,参数映射为竖屏;
⑫硬件渲染为反向竖屏,软件目标为反向横屏的,参数映射为反向横屏;
⑬硬件渲染为反向竖屏,软件目标为反向竖屏的,参数映射为反向竖屏;
(3)将新的参数传递给WindowManagerService,刷新整个系统window界面;
(4)将新的参数传递给surfaceflinger,更新渲染层方向;
(5)将新的参数传递给InputReader,更新输入设备(例如触摸屏)的匹配方向;
(6)保存新的参数到system.prop,以备在设备重启之后保留设置值。
本发明能够实现android显示系统动态设置调整的功能。
上述说明示出并描述了本发明的优选实施例,如前所述,应当理解本发明并非局限于本文所披露的形式,不应看作是对其他实施例的排除,而可用于各种其他组合、修改和环境,并能够在本文所述发明构想范围内,通过上述教导或相关领域的技术或知识进行改动。而本领域人员所进行的改动和变化不脱离本发明的精神和范围,则都应在本发明所附权利要求的保护范围内。