一种基于Android操作系统的多窗口界面实现方法

文档序号:6637677阅读:379来源:国知局
一种基于Android操作系统的多窗口界面实现方法
【专利摘要】本发明公开了一种基于Android操作系统的多窗口界面实现方法,所述系统包括包管理服务单元、活动管理服务单元、窗口管理服务单元,所述实现方法包括:用户端启动新的应用窗口,对应的信息发送给活动管理服务单元;活动管理服务单元校验启动权限;活动管理服务单元进行应用窗口的切换;活动管理服务单元启动新的应用;窗口管理服务单元分配位置和大小;窗口管理服务单元显示新的应用窗口。本发明可实现在Android设备屏幕上面同时显示多个应用窗口,而且用户可以在不退出当前应用的情况下打开新的应用。
【专利说明】—种基于Android操作系统的多窗口界面实现方法

【技术领域】
[0001]本发明涉及移动通讯领域,尤其涉及一种基于Android操作系统的多窗口界面实现方法。

【背景技术】
[0002]目前Android系统的所有应用只能单个窗口全屏显示,也就是说屏幕上不能同时显示两个以上的应用,这样当用户需要从一个应用暂时切换到另一个应用时,必需先退出当前应用,然后再进入到另一个应用,造成很大的不方便,例如当前用户正在看电影,然后收到微信消息,用户想要查看微信消息,则要从状态栏打开微信并退出当前的视频界面,完成微信消息的回复后,需要按返回键才能再次回到视频界面,而此时可能需要重新缓冲视频,整个过程用户体验很差。
[0003]Android操作系统架构从上层应用到底层内核总共分五层:应用层、应用框架层、核心库层、硬件抽象层、Linux内核层,Android操作系统的基础是Linux操作系统,众所周知Linux系统是支持多进程的操作系统,也就是说可以同时运行多个应用程序,而基于Linux内核开发的桌面系统都是支持多窗口的,由于Android系统最初开发出来是用于手机等小屏的移动终端设备,所以Android系统的在应用框架层的实现上对系统做了限制,使得系统运行时设备屏幕上同时只能有一个应用的界面与用户进行交互。事实上Android系统的依然保留着Linux系统的多进程特性,即从一个应用切换到另一个应用时,表面上看好像是退出了前一个应用,但实际上该应用的进程仍然在后台运行,只是前端的界面被隐藏了,这样,当再次切换到该应用时就不必重新启动进程,从而加快了启动的速度,虽然可以降低应用切换对用户体验的不良影响,但依然没有解决上述现有技术的问题,在手机这种小屏的设备上面,用户也许可以接受这个问题,但是在8寸以上的较大屏的设备上,应该以更好的方式呈现应用窗口,解决该问题。
[0004]因此,本发明对Android系统的应用框架层进行改造,使得其支持多个应用窗口同时显示在设备屏幕上,这样就可以充分利用较大屏的设备屏幕空间,同时解决现有技术所存在的问题。


【发明内容】

[0005]本发明的主要目的在于提供一种基于Android操作系统的多窗口界面实现方法,可实现在Android设备屏幕上面同时显示多个应用窗口,而且用户可以在不退出当前应用的情况下打开新的应用,给用户一个非常好的操作体验。
[0006]为实现上述目的,本发明提出的一种基于Android操作系统的多窗口界面实现方法,所述系统包括包管理服务单元、活动管理服务单元、窗口管理服务单元,所述实现方法具体包括以下步骤:
[0007]A、用户端启动新的应用窗口,对应的信息发送给活动管理服务单元;
[0008]B、活动管理服务单元根据发送过来的信息解析出目标应用信息,校验启动权限,如校验成功,执行步骤C,如校验失败,启动失败;
[0009]C、活动管理服务单元将目标应用信息告知窗口管理服务单元准备进行应用窗口的切换;
[0010]D、活动管理服务单元启动新的应用;
[0011]E、窗口管理服务单元根据新的应用窗口的配置信息为其分配位置和非全屏的大小;
[0012]F、新的应用在分配的窗口中绘画自己的窗口界面,绘画完成后窗口管理服务单元将新的应用窗口显不出来,启动完成;
[0013]G、在活动管理服务单元中设置一套管理应用的基础策略,实现应用窗口的应用操作需求。
[0014]进一步的,步骤A中启动新的应用窗口包括如下步骤:
[0015]Al、启动系统,调用包管理服务单元,获取当前所有安装的应用包信息列表;
[0016]A2、提取所有应用包信息中的所有应用图标及其对应的启动相关信息;
[0017]A3、创建一个从图标到启动相关信息的Map关系列表;
[0018]A4、创建一个系统窗口并将所有应用图标添加到窗口中;
[0019]A5、对系统中应用的变化情况监听系统广播;
[0020]A6、添加一个所有应用按钮到导航栏最左边;
[0021]A7、若用户点击所有应用按钮,显示装有所有应用图标的系统窗口 ;若用户点击某个图标,通过图标到启动相关信息的Map关系列表找到该图标对应的启动相关信息;
[0022]A8、调用活动管理服务单元,启动应用。
[0023]进一步的,步骤A5所述监听系统广播包括以下步骤:
[0024]A51、收到系统应用包相关广播,判断广播类型;若广播类型为应用安装,则执行步骤A52 ;若广播类型为应用卸载,则执行步骤A53,若广播类型为应用升级,则执行步骤A54 ;
[0025]A52、根据广播中的包信息调用包管理服务单元,提取新安装的应用包中所有图标及其对应的启动信息,若图标数量大于零,则将这些图标及其对应的启动信息加入到Map关系列表中;若图标数量小于零,则结束监听;
[0026]A53、根据广播中的包信息删除Map列表关系列表中的所有该包相关的Map元素;
[0027]A54、根据广播中的新包信息调用PMS提取新的应用包中所有图标及其对应的启动相关信息;遍历Map关系列表,与提取到的图标信息对比;删除在新包中不存在的图标Map元素,添加新包中新的图标及启动相关信息Map元素;
[0028]A55、根据新的Map关系列表重建系统窗口,结束监听。
[0029]进一步的,步骤E中窗口管理服务单元根据新的应用窗口的配置信息为其分配位置和大小包括如下步骤:
[0030]E1、将屏幕固定为横屏模式,将纵坐标值固定为状态栏的高度;
[0031]E2、判断应用窗口为横屏竖屏的属性,根据窗口属性计算应用窗口宽度和初始横坐标值;
[0032]E3、设置一套竖屏配置项,当系统启动竖屏应用模式时,拷贝这套竖屏配置项,以实现竖屏的应用强制在横屏上面正常显示。
[0033]进一步的,步骤E2所述的计算方法包括:
[0034]E21、计算应用窗口宽度,若应用窗口为竖屏,设置窗口宽度为三分之一横向屏宽;若应用窗口为横屏,设置窗口宽度为三分之二横向屏宽;
[0035]E22、计算初始横坐标值,设置两个计数器,分别计数自系统启动以来的系统打开过的横屏和竖屏应用窗口的数量,根据计数结果为新的窗口计算一个初始的横坐标,对于拖动窗口,根据当前焦点窗口的大小和位置,来确定新的应用窗口的最终横坐标值”。
[0036]进一步的,步骤E22所述为新窗口计算初始横坐标的计算方法包括:
[0037]计数器计数自系统启动以来的系统打开过的横屏和竖屏应用窗口的数量分别为CH和CP,横向屏宽为SW,窗口的初始横坐标为X,若应用窗口若为竖屏,则:X= (CP Mod3)*1/3SW ;
[0038]若应用窗口若为横屏,则:当(CH Mod 2) = O时,X = O ;当(CH Mod 2) = I时,X=1/3SW。
[0039]进一步的,步骤E22所述最终横坐标值的计算方法包括:
[0040]E221、获取当前焦点窗口的宽度和横坐标的值;
[0041]E222、计算当前焦点窗口的宽度是否等于横向屏宽,若是,则焦点窗口为全屏宽,设定应用窗口的初始横坐标值为零;若否,则执行步骤E223 ;
[0042]E223、计算应用窗口和当前焦点窗口的宽度是否都等于三分之二横向屏宽,若是,则说明应用窗口和焦点窗口相交,无需处理,结束计算;若否,则计算新窗口和焦点窗口是否相交,若不相交,则无需处理,结束计算;若相交,则执行步骤E224 ;
[0043]E224、计算应用窗口的宽度是否等于三分之二横向屏宽,若是,如果应用窗口的初始横坐标值为零,则最终横坐标值为三分之一横向屏宽,如果应用窗口的初始横坐标值为三分之一横向屏宽,则最终横坐标值为零;若否,如果应用窗口的初始横坐标值为三分之二横向屏宽,则最终横坐标值为零,否则,最终横坐标值为初始横坐标值与三分之一横向屏宽之和。
[0044]E225、再次计算新窗口和焦点窗口是否相交,若是,如果应用窗口的初始横坐标值为三分之二横向屏宽,则最终横坐标值为零,否则最终横坐标值为初始横坐标值与三分之一横向屏宽之和;若否,无需处理,结束计算。
[0045]进一步的,步骤E3具体包括以下步骤:
[0046]E31、判断应用程序窗口界面自身的方向配置项是否为竖屏,若是,系统生成一套竖屏的配置项;若否,系统生成一套横屏的配置项;
[0047]E32、应用程序拷贝新生成的系统配置项;
[0048]E33、应用程序根据新生成的系统配置项来遍历其资源文件,找到最匹配的那一套;
[0049]E34、将最匹配的那一套资源文件用于界面显示。
[0050]优选地,步骤G所述应用操作包括打开、关闭、最小化和恢复应用窗口以及从导航栏图标切换焦点应用窗口,以及缩小、放大、拖动应用窗口和通过点击非焦点应用窗口内部来切换应用窗口;
[0051]所述打开应用窗口具体包括以下步骤:
[0052]G11、在导航栏上显示当前所有打开应用的图标,对打开应用的个数进行限制;
[0053]G12、活动管理服务单元收到开启应用窗口的请求,判断是否存在App栈(用来管理非桌面应用的栈),若存在,则在App栈中寻找该应用对应的App Task (非桌面应用的运行中的应用),如找到对应的App Task,将找到的App Task移动到App栈的顶部,如果该App Task的状态为Paused (停止)则将其设置为Started (开始),否则执行步骤G3 ;若不存在,创建App栈,执行步骤G13 ;
[0054]G13、创建一个新的App Task,设置Task (运行中的应用)状态为Started,将新的App Task加入到App栈的顶部;
[0055]G14、将App栈设为焦点栈,将该App Task对应窗口设为焦点窗口 ;
[0056]G15、显示新的应用窗口 ;
[0057]G16、发送Task To Front (任务到前台)广播并附带该Task相关信息,结束任务;
[0058]步骤G所述恢复应用窗口具体包括以下步骤:
[0059]G21、活动管理服务单元收到移动Task到前台的请求,所述请求附带Task ID (运行中的应用的识别号);
[0060]G22、根据Task ID在App栈中寻找对应的App Task,若找到,执行步骤G23,若未找到,结束任务;
[0061]G23、将找到的App Task移动到App栈顶,如果所述App Task对应的应用窗口被隐藏则调用窗口显示单元显示它,如果所述App Task的状态为Paused则将其设置为Started ;
[0062]G24、将所述App Task对应应用窗口设为焦点窗口 ;
[0063]G25、发送Task To Front广播并附带该Task相关信息,结束任务;
[0064]步骤G所述最小化应用窗口具体包括以下步骤:
[0065]G31、活动管理服务单元收到移动Task到后台的请求,所述请求附带Task ID ;
[0066]G32、根据Task ID在App栈中寻找对应的App Task,若找到,执行步骤G33,若未找到,结束任务;
[0067]G33、将找到的App Task移动到App栈底,如果该App Task的状态为Started则将其设置为Paused并调用窗口显示单元隐藏其窗口 ;
[0068]G34、获取App栈顶的App Task,判断App Task状态是否为Started,若是,将该AppTask对应应用窗口设为焦点窗口 ;若否,将Home栈(用来管理桌面应用的Task栈)设为焦点栈,将Home Task(桌面应用运行的Task)对应桌面窗口设为焦点窗口 ;
[0069]G35、发送Task To Front广播并附带该Task相关信息,结束任务;
[0070]步骤G所述关闭应用窗口具体包括以下步骤:
[0071]G41、活动管理服务单元收到删除Task的请求,所述请求附带Task ID ;
[0072]G42、根据Task ID在App栈中寻找对应的App Task,若找到,执行步骤G43,若未找到,结束任务;
[0073]G43、如果找到的App Task的状态为Started则调用WMS隐藏其窗口,将该AppTask移动从App栈删除;
[0074]G44、获取App栈顶的App Task,判断App Task状态是否为Started,若是,将该App Task对应应用窗口设为焦点窗口 ;若否,将Home栈(用来管理桌面应用的Task栈)设为焦点栈,将Home Task对应桌面窗口设为焦点窗口 ;
[0075]G45、发送Task To Front广播并附带该Task相关信息,结束任务。
[0076]步骤G所述缩小、放大、拖动应用窗口和通过点击非焦点应用窗口内部来切换应用窗口具体包括以下步骤:
[0077]G51、设置一个全局的触摸输入事件监听器,用于监听屏幕上所有的触摸输入事件,如按下、移动、放手,同时获取到各个事件对应的点的坐标;
[0078]G52、记录焦点窗口的上下左右的值,根据这些值判断触摸点是否落在了焦点窗口上,当触摸点落在了非应用窗口则不作处理,而当触摸点落在了焦点窗口内时,判断其是否是在焦点窗口距离上边N个pixel (像素)高度区域内,当落在焦点窗口上边N个pixel高度区域内时,即可进行拖动或者放大缩小,否则当落在非焦点窗口内时,则从上到下遍历当前所有的非焦点窗口,以找到该点落在哪个应用窗口内,找到了而且该窗口不是桌面窗口,则调用AMS将对应的task移动到前台,这样即切换了焦点窗口。
[0079]本发明通过对Android系统的应用框架层进行改造,使得其支持多个应用窗口同时显示在设备屏幕上,这样就可以充分利用较大屏的设备屏幕空间,同时解决用户体验差的问题,由于采用上述方法,使本发明具有以下优点:
[0080]1、多个应用窗口可以同时显示在屏幕上,且互不干扰;一定程度上避免了窗口的重叠问题,充分利用有限的屏幕空间;
[0081]2、用户可以在不用退出当前应用窗口的情况下打开新的应用窗口 ;
[0082]3、窗口的拖动、缩放、最小化和恢复、关闭等操作方便简单,只需要单个手指就可以轻松完成。
[0083]本发明的特征及优点将通过实施例结合附图进行详细说明。

【专利附图】

【附图说明】
[0084]图1为本发明的系统模块关系图;
[0085]图2为本发明的总流程图;
[0086]图3为本发明的启动应用窗口的流程图;
[0087]图4为本发明的监听广播的流程图;
[0088]图5为本发明为新的应用窗口分配位置和大小的流程图;
[0089]图6为现有竖屏应用在横屏上显示的流程图;
[0090]图7为本发明竖屏应用在横屏上显示的流程图;
[0091]图8为本发明打开窗口的流程图;
[0092]图9为本发明恢复窗口的流程图;
[0093]图10为本发明最小化窗口的流程图;
[0094]图11为本发明关闭窗口的流程图;
[0095]图12为本发明的系统UI处理广播的流程图;
[0096]图13为本发明处理用户触摸动作的流程图;
[0097]图14为本发明切换点窗口的流程图;
[0098]图15为本发明图14中“根据手指的下一步操作来做出响应”这一步骤的实现流程图;
[0099]图16为本发明识别单手指滑动操作的流程图;
[0100]图17为本发明识别双击操作的流程图。

【具体实施方式】
[0101]为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
[0102]如图1所示,本发明包括:
[0103]包管理服务Package Manager Service (PMS)单元:Android系统的应用程序是以.apk文件的形式提供的,而这种文件在系统中被安装后是以包(Package)的形式被管理的,系统有一个专门的服务叫包管理服务(Package Manager Service)负责管理系统中所有应用程序的包,包括包文件的安装路径、包内的各种配置、资源文件等;
[0104]活动管理服务Act ivi ty Manager Service (AMS)单元:Android系统中应用程序的用户界面是以活动(Act ivi ty)的形式存在的,一个Act ivi ty对象对应一个窗口页面,系统有一个专门服务叫活动管理服务(Act ivi ty Manager Service)负责管理系统所有的Act ivi ty对象,包括启动、暂停、停止、结束等等整个生命周期。同时,AMS还负责管理应用进程的启动、停止、OOM参数设置等;
[0105]窗口管理服务Window Manager Service (WMS)单元:窗口管理服务是负责窗口(Window)对象的管理的专门服务,一个窗口对应上面的一个Act ivi ty,两者的区别在于Act ivi ty更多的是实现程序逻辑、保存配置信息,而Window则更多的是窗口的显示、隐藏状态、大小、位置等方面的信息;
[0106]现有的系统从一个应用切换到另一个应用时,AMS主动暂停当前应用并隐藏了其窗口,这就是为什么切换应用时当前应用会退出的原因。而在WMS为新的应用窗口分配大小和位置这一步骤中,现有的Android系统做法是窗口宽度即为屏宽,而窗口高度会根据应用窗口的配置可能排除或是加上状态栏高度和导航栏高度,但总体来说,新的应用窗口占满了屏幕所有可用空间,这也是应用全屏显示的原因。所以,根据以上两个原因,本发明首先去掉“AMS主动暂停当前应用并隐藏其窗口”相关步骤,然后在“WMS为新的应用分配窗口位置及大小”时不使用全屏的大小,且窗口位置不一样,这样即可完成一个屏幕显示多个窗口的功能,如图2所示,为本发明的总体流程图,实现屏幕上同时显示多个应用窗口的,具体包括以下步骤:
[0107]A、用户端启动新的应用窗口,对应的信息发送给活动管理服务单元;
[0108]B、活动管理服务单元根据发送过来的信息解析出目标应用信息,校验启动权限,如校验成功,执行步骤C,如校验失败,启动失败;
[0109]C、活动管理服务单元将目标应用信息告知窗口管理服务单元准备进行应用窗口的切换;
[0110]D、活动管理服务单元启动新的应用;
[0111]E、窗口管理服务单元根据新的应用窗口的配置信息为其分配位置和非全屏的大小;
[0112]F、新的应用在分配的窗口中绘画自己的窗口界面,绘画完成后窗口管理服务单元将新的应用窗口显不出来,启动完成;
[0113]G、在活动管理服务单元中设置一套管理应用的基础策略,实现应用窗口的应用操作需求。
[0114]下面来介绍一下桌面应用(Launcher) , Android系统的桌面应用是一种特殊的应用,是系统启动后第一个打开的应用,其主要功能就类似于Windows系统的桌面一样,当一个应用被安装后可以在桌面上放置一个图标,通过点击这个图标可以从桌面启动该应用。不过桌面应用本质上还是一个Android应用,而所谓的桌面本质上也是一个应用窗口,在桌面上点击一个图标启动一个应用后,其实也就是从桌面应用切换到所启动的应用,这样来说,桌面其实是被暂停了,所以,当我需要打开其他应用时需要先回到桌面,然后点击另一个图标才能打开另一个应用,这就是为什么从一个应用切换到另一个应用时需要退出先退出当前应用的主要原因。既然如此,如果能有一个窗口可以在不退出当前应用的情况下显示出来,并且窗口中放置着所有应用的图标,点击其中一个图标即可启动新的应用,就可以解决上述切换的问题了。好在Android系统的窗口分了系统窗口和应用窗口两种层级的窗口,系统窗口是可以显示在应用窗口的顶层而不影响应用窗口的,状态栏和导航栏就是两个系统级的窗口,状态栏的下拉框也是系统窗口。同时应用的图标也都是可以通过调用PMS来获得,这样两个条件都具备了,我们就可以实现一个方便快捷的启动应用的方法了。具体做法就是,在导航栏左边添加一个按钮,点击该按钮时即显示一个系统级窗口,里面以网格形式放置着所有应用的图标,点击某个图标即可启动对应的应用,如图3所示,步骤A所述启动新的应用窗口包括以下步骤:
[0115]Al、启动系统,调用包管理服务单元,获取当前所有安装的应用包信息列表;
[0116]A2、提取所有应用包信息中的所有应用图标及其对应的启动相关信息;
[0117]A3、创建一个从图标到启动相关信息的Map关系列表;
[0118]A4、创建一个系统窗口并将所有应用图标添加到窗口中;
[0119]A5、对系统中应用的变化情况监听系统广播;
[0120]A6、添加一个所有应用按钮到导航栏最左边;
[0121]A7、若用户点击所有应用按钮,显示装有所有应用图标的系统窗口 ;若用户点击某个图标,通过图标到启动相关信息的Map关系列表找到该图标对应的启动相关信息;
[0122]AS、调用活动管理服务单元,启动应用。
[0123]图3中步骤A2“提取所有应用包的所有图标及其对应的启动相关信息”,此处需要解释一下,Andro i d的每个应用中可能包含多个启动图标,这些图标分别会对应不同的窗口界面,也有可能没有启动图标,这种就是属于后台的服务型应用,没有界面的应用。
[0124]图3所示的流程是一个启动应用的主流程,窗口所列出的应用仅仅是系统启动时,系统中已经存在的应用,而当系统启动后,还会有应用的安装、卸载、升级等情况,这些可能会造成窗口中图标的增删改,而Android系统在有应用安装、卸载和升级时会发送相应的广播及相关信息出来,因此我们可以监听系统广播来做相应的处理,如图4所示,步骤A5所述监听系统广播包括以下步骤:
[0125]A51、收到系统应用包相关广播,判断广播类型;若广播类型为应用安装,则执行步骤A52 ;若广播类型为应用卸载,则执行步骤A53,若广播类型为应用升级,则执行步骤A54 ;
[0126]A52、根据广播中的包信息调用包管理服务单元,提取新安装的应用包中所有图标及其对应的启动信息,若图标数量大于零,则将这些图标及其对应的启动信息加入到Map关系列表中;若图标数量小于零,则结束监听;
[0127]A53、根据广播中的包信息删除Map列表关系列表中的所有该包相关的Map元素;
[0128]A54、根据广播中的新包信息调用PMS提取新的应用包中所有图标及其对应的启动相关信息;遍历Map关系列表,与提取到的图标信息对比;删除在新包中不存在的图标Map元素,添加新包中新的图标及启动相关信息Map元素;
[0129]A55、根据新的Map关系列表重建系统窗口,结束监听。
[0130]如图5所示,步骤E所述丽S根据新的应用窗口的配置信息为其分配位置和非全屏的大小是通过三分屏策略来完成的。首先屏幕固定在横屏模式,即界面不可以随着屏幕的旋转而旋转,此处假设横向屏宽为SW,除去导航栏和状态栏的横向屏高为SH,然后窗口在纵向是固定的,高度为SH,纵坐标值也固定为状态栏的高度,所以,只需要计算横坐标X和宽度W,宽度会根据窗口的横竖屏属性确定(竖屏为1/3屏宽,其他的为2/3屏宽),横坐标的计算就比较复杂,首先设置两个计数器,假设为CH和CP,分别计数自系统启动以来的系统打开过的横屏和竖屏应用窗口的数量,根据这个计数值,可以为新的窗口计算一个初始的横坐标,然后由于用户可以拖动窗口,即移动窗口位置,所以,还需要根据当前焦点窗口的大小和位置,来确定新的应用窗口的最终横坐标,如图5所示,具体包括如下步骤:
[0131]E1、将屏幕固定为横屏模式,将纵坐标值固定为状态栏的高度;
[0132]E2、判断应用窗口为横屏竖屏的属性,根据窗口属性计算应用窗口宽度和初始横坐标值;
[0133]E3、设置一套竖屏配置项,当系统启动竖屏应用模式时,拷贝这套竖屏配置项,以实现竖屏的应用强制在横屏上面正常显示。
[0134]步骤E2所述的计算方法包括:
[0135]E21、计算应用窗口宽度,若应用窗口为竖屏,设置窗口宽度为三分之一横向屏宽;若应用窗口为横屏,设置窗口宽度为三分之二横向屏宽;
[0136]E22、计算初始横坐标值,设置两个计数器,分别计数自系统启动以来的系统打开过的横屏和竖屏应用窗口的数量,根据计数结果为新的窗口计算一个初始的横坐标;对于拖动窗口,根据当前焦点窗口的大小和位置,来确定新的应用窗口的最终横坐标值。
[0137]步骤E22所述最终横坐标值的计算方法包括:
[0138]E221、获取当前焦点窗口的宽度和横坐标的值;
[0139]E222、计算当前焦点窗口的宽度是否等于横向屏宽,若是,则焦点窗口为全屏宽,设定应用窗口的初始横坐标值为零;若否,则执行步骤E223 ;
[0140]E223、计算应用窗口和当前焦点窗口的宽度是否都等于三分之二横向屏宽,若是,则说明应用窗口和焦点窗口相交,无需处理,结束计算;若否,则计算新窗口和焦点窗口是否相交,若不相交,则无需处理,结束计算;若相交,则执行步骤E224 ;
[0141]E224、计算应用窗口的宽度是否等于三分之二横向屏宽,若是,如果应用窗口的初始横坐标值为零,则最终横坐标值为三分之一横向屏宽,如果应用窗口的初始横坐标值为三分之一横向屏宽,则最终横坐标值为零;若否,如果应用窗口的初始横坐标值为三分之二横向屏宽,则最终横坐标值为零,否则,最终横坐标值为初始横坐标值与三分之一横向屏宽之和。
[0142]E225、再次计算新窗口和焦点窗口是否相交,若是,如果应用窗口的初始横坐标值为三分之二横向屏宽,则最终横坐标值为零,否则最终横坐标值为初始横坐标值与三分之一横向屏宽之和;若否,无需处理,结束计算。
[0143]Android系统下竖屏应用在启动后,即使当前设备处于横向状态,屏幕也会被强制竖屏显示。由于本发明将屏幕固定为横屏显示,所以为了能让竖屏应用正常显示在横屏上,除了窗口大小分配为竖向(宽为1/3屏宽,高为处状态栏和导航栏以外的屏高)以外,必须改变系统的横竖屏显示机制。应用窗口的界面显示主要涉及两方面,一个是资源文件,如图片、字符串、界面布局、颜色等;另一个就是窗口的横竖屏配置;资源文件本身是根据窗口的横竖屏属性、屏的像素密度等因素设计的,就是说横屏显示界面有横屏资源,竖屏显示界面有竖屏资源,再加上像素密度等因素,一般一个应用会有多套资源文件,以让其窗口适应不同的设备屏幕配置。现有系统的界面显示过程是:首先系统启动后,会根据当前设备的横竖屏状态生成一套配置项,假设为SysConfigs,其中包括横竖屏属性,然后应用程序在做窗口界面设计时也有其自身的方向配置项,假设为AppOr i,当一个应用窗口被打开时,具体流程如图6所不。
[0144]由图6的流程可知,如果想要一个竖屏的应用正常显示,只要该应用拿到的系统配置是一套竖屏的配置项就好了,所以我们可以人为的制造一套竖屏的配置项,当竖屏应用启动时,它拷贝的是这套人造的竖屏配置项,而且不用改变当前横屏的SysConfig,这样就可以实现竖屏的应用强制在横屏上面正常显示了,具体的流程如图7所示:
[0145]E31、判断应用程序窗口界面自身的方向配置项是否为竖屏,若是,系统生成一套竖屏的配置项;若否,系统生成一套横屏的配置项;
[0146]E32、应用程序拷贝新生成的系统配置项;
[0147]E33、应用程序根据新生成的系统配置项来遍历其资源文件,找到最匹配的那一套;
[0148]E34、将最匹配的那一套资源文件用于界面显示。
[0149]由上图7可以看到,这个流程未改变SysConfigs,也就可以保持屏幕的横屏状态,同时让竖屏的应用使用了竖屏的资源来显示。
[0150]如图8_11所不,本发明关闭、最小化和恢复应用窗口以及从导航栏图标切换焦点应用窗口的实现方案:
[0151]首先在导航栏上显示当前所有打开应用的图标,不过由于移动设备系统内存及(PU资源的限制,此处打开应用的个数不可能无限,所以会根据具体系统做一个限制,假定为NMAX ;导航栏的实现是在System UI这个应用中实现的,System UI是一个系统级应用,从名字就可以知道它是负责实现系统Π显示的,状态栏和导航栏就是系统Π,其显示和控制逻辑都是在这个应用中实现的,因此,显示打开应用的图标这个工作就需要由System UI来完成了。
[0152]Android系统中是以Task来代表一个运行中的应用的,每个Task有独立的TaskID,还有状态,而Task又是以栈的形式来管理的,系统总共有两个Task栈,一个是用来管理桌面应用的Task栈,称为Home栈,这是一个特殊的栈,其中也只有一个Task,即桌面应用运行的Task,称作Home Task,另一个栈则用来管理非桌面应用的,称作App栈,非桌面应用的Task也称作App Task,系统刚启动完成时,只存在一个Home栈,而当用户启动一个新的应用时才会创建App栈,并将新的App Task加入到这个栈,每当有新的应用打开,就会把相应的Task添加到栈的顶部,并将其设置为焦点窗口。
[0153]这些在AMS中实现的一套管理应用的基础策略,以这套策略为基础,本发明实现了一套新的流程以实现多窗口界面的窗口关闭、最小化等操作需求。
[0154]如图8所示,打开应用窗口具体包括以下步骤:
[0155]G11、在导航栏上显示当前所有打开应用的图标,对打开应用的个数进行限制;
[0156]G12、活动管理服务单元收到开启应用窗口的请求,判断是否存在App栈(用来管理非桌面应用的栈),若存在,则在App栈中寻找该应用对应的App Task (非桌面应用的运行中的应用),如找到对应的App Task,将找到的App Task移动到App栈的顶部,如果该App Task的状态为Paused (停止)则将其设置为Started (开始),否则执行步骤G3 ;若不存在,创建App栈,执行步骤G13 ;
[0157]G13、创建一个新的App Task,设置Task状态为Started,将新的App Task加入到App栈的顶部;
[0158]G14、将App栈设为焦点栈,将该App Task对应窗口设为焦点窗口 ;
[0159]G15、显示新的应用窗口 ;
[0160]G16、发送Task To Front广播并附带该Task相关信息,结束任务;
[0161]如图9所示,恢复应用窗口具体包括以下步骤:
[0162]G21、活动管理服务单元收到移动Task(运行中的应用)到前台的请求,所述请求附带Task ID(运行中的应用的识别号);
[0163]G22、根据Task ID在App栈中寻找对应的App Task,若找到,执行步骤G23,若未找到,结束任务;
[0164]G23、将找到的App Task移动到App栈顶,如果所述App Task对应的应用窗口被隐藏则调用窗口显示单元显示它,如果所述App Task的状态为Paused则将其设置为Started ;
[0165]G24、将所述App Task对应应用窗口设为焦点窗口 ;
[0166]G25、发送Task To Front广播并附带该Task相关信息,结束任务;
[0167]如图10所示,最小化应用窗口具体包括以下步骤:
[0168]G31、活动管理服务单元收到移动Task到后台的请求,所述请求附带Task ID ;
[0169]G32、根据Task ID在App栈中寻找对应的App Task,若找到,执行步骤G33,若未找到,结束任务;
[0170]G33、将找到的App Task移动到App栈底,如果该App Task的状态为Started则将其设置为Paused并调用窗口显示单元隐藏其窗口 ;
[0171]G34、获取App栈顶的App Task,判断App Task状态是否为Started,若是,将该AppTask对应应用窗口设为焦点窗口 ;若否,将Home栈(用来管理桌面应用的Task栈)设为焦点栈,将Home Task(桌面应用运行的Task)对应桌面窗口设为焦点窗口 ;
[0172]G35、发送Task To Front广播并附带该Task相关信息,结束任务;
[0173]如图11所示,关闭应用窗口具体包括以下步骤:
[0174]G41、活动管理服务单元收到删除Task的请求,所述请求附带Task ID ;
[0175]G42、根据Task ID在App栈中寻找对应的App Task,若找到,执行步骤G43,若未找到,结束任务;
[0176]G43、如果找到的App Task的状态为Started则调用WMS隐藏其窗口,将该AppTask移动从App栈删除;
[0177]G44、获取App栈顶的App Task,判断App Task状态是否为Started,若是,将该App Task对应应用窗口设为焦点窗口 ;若否,将Home栈(用来管理桌面应用的Task栈)设为焦点栈,将Home Task对应桌面窗口设为焦点窗口 ;
[0178]G45、发送Task To Front广播并附带该Task相关信息,结束任务。
[0179]导航栏上面对于打开应用图标的显示,主要是通过监听Task To Front广播来完成的,广播附带的Task相关信息主要包括Task ID,是否是Home Task,启动该Task相关的信息,应用包名等,在System UI中处理这些广播,System UI中会用一个Task List保存所有Task相关信息,其处理流程如图12所示。
[0180]在导航栏上面显示了多个应用图标后,就可以根据用户的手指触摸操作来对应用窗口做相应处理了。导航栏上的图标是按照从左到右横向排列的,且宽度和高度都是固定的,假设为IW和IH,每个图标显示的位置可以通过系统调用来获取到,那么假设获取到的第一个图标的左边位置为LI,根据触摸点的横坐标即可算出该点落在了哪个图标上,计算方法是:
[0181]假设触摸点横坐标为X,落在了第i个图标上,则i = (X-Ll)/Iff+1
[0182]根据手指触摸按下与放开两点的坐标即可计算出用户是向上滑动,还是横向滑动,还是只是点击某个图标,方法如下:
[0183]假设按下点的横纵坐标为:XD/YD,放开点的坐标为XU/YU,则:
[0184]如果sqrt( (XU-XD)* (XU-XD)+ (YU-YD)* (YU-YD))〈20,sqrt 是取平方根的意思,此处表明放开点和按下点相距非常近,可以认为手指未滑动,则确定为点击操作;
[0185]如果(YU-YD) >IH&&abs (XU-XD)〈10,表明是向上滑动(abs是取绝对值的意思);
[0186]如果(XU-XD) >IW&&abs (YU-YD)〈10,表明是向左右横向滑动(abs是取绝对值的意思);
[0187]根据以上的计算算法,即可识别出用户触摸操作,之后做出相应的动作,具体流程如图13所示。
[0188]如图14所示,本发明缩小、放大、拖动应用窗口以及通过点击非焦点应用窗口内部来切换应用窗口的实现方案:
[0189]窗口的缩放、拖动以及通过点击非焦点应用窗口内部来切换应用窗口,这些操作属于在窗口显示区域范围内(即状态栏以下、导航栏以上的屏幕区域)的触摸操作,所以使用一个全局的触摸输入事件监听器,这个监听器可以监听到屏幕上所有的触摸输入事件,按下、移动、放手,同时获取到各个事件对应的点的坐标。实现的逻辑就是,首先排除所有触摸在状态栏、导航栏、输入法窗口、以及所有应用窗口的触摸点,因为这些都是非应用窗口,然后记录焦点窗口的上下左右的值,根据这些值可以判断触摸点是否落在了焦点窗口上,当触摸点落在了非应用窗口则不做处理,而当触摸点落在了焦点窗口内时,还需要判断其是否是在焦点窗口距离上边N个pixel高度区域内,当落在焦点窗口上边N个pixel高度区域内时,即可进行拖动或者放大缩小,否则当落在非焦点窗口内时,则从上到下遍历当前所有的非焦点窗口,以找到该点落在哪个应用窗口内,找到了而且该窗口不是桌面窗口,则调用AMS将对应的task移动到前台,这样即切换了焦点窗口。
[0190]图14中,“根据手指的下一步操作来做出响应”这一步骤,具体的细节是,若用户手指按下后进行滑动,则对窗口进行拖动;若用户单手指进行双击(双击的定义是600ms内连续点击同一点两次),则进行窗口的缩放,总体流程图如图15所示。
[0191]对于窗口手指操作的识别,首先说明一下Android系统中触摸事件的上报流程,Android系统支持多点触控,单独一个手指对应的上报事件主要有三种,按下Down、移动Move、放手Up,事件会附带触摸点的信息包括横纵坐标、ID,当一个手指按下时就先上报一个Down事件,然后手指按住或者滑动过程中会以一定频率一直上报Move事件,当手指放手时则上报一个Up事件;当多个手指按下时,根据点被识别的时机,先上报第一个手指触摸点的Down事件,之后新的被识别到的手指触摸点则上报Pointer Down事件,然后就会上报Move事件,Pointer Down事件和Move事件都会附带有几个点以及各个点的坐标、ID,当手指放手时,若不是最好一个手指放手,则上报Pointer Up事件,若是最后一个手指,则上报Up事件,两者不同点在于,Pointer Up除了附带的放手的点的坐标和ID以外还包括现在还剩下几个点以及各个点的坐标、ID,而Up事件只有一个放手的点的坐标和ID。
[0192]由于本发明只支持一个手指的操作,因此对于Pointer Down事件未做处理。另外对于识别“双击同一点”这个操作,此处的“同一点”是一个近似的,由于人手指触摸是一个面的触摸,所以即使看似同一点的触摸点击操作,系统识别到的Up和Down的点坐标不可能精确的相等,因此当两个点间的距离小于一定值D时就认为是同一点,即:
[0193]sqrt((Xl-X2)*(Xl-X2) + (Yl-Y2)*(Yl_Y2))〈D,sqrt 是取平方根的意思,
[0194]如图16所示,为识别单手指滑动操作流程图,如图17所示,为识别双击操作的流程图,流程图中提到同一点则代表两点满足上述的条件,然后双击即点击两次,这里就要一个点击计数,假设为C,C初始值为O ;识别到手指的操作方式之后,就需要计算窗口缩放或是拖动的最终位置了,本发明所实现的窗口缩放和拖动不是自由无限制的缩放和拖动,纵向不变,只做横向变动,由于窗口在纵向是固定的,因此在计算时只以宽度和窗口左边的坐标值作为参考,那么假设窗口当前宽度为W,左边坐标为X,屏宽为SW,其计算逻辑如下:
[0195]首先窗口拖动,当识别到用户进行单手指滑动时,根据记录的XD/YD,以及当前Move事件的XM/YM,即可知道移动的横纵坐标距离,假设窗口初始位置的左上角点坐标为XS/YS,移动后的坐标为XE/YE,那么XE = XS+(XM-XD),YE = YS+(YM-YD),在用户手指放手前,XM和YM是不断变化的,这样窗口的位置也跟随手指不断移动,也就是说在移动过程中,窗口实际是被自由拖动的,但当手指放手时,则会根据XU/YU计算XE/YE,即XE =XS+(XU-XD),YE = YS+(YU-YD,不过此时的XE/YE只是暂时的,因为它们不会刚刚好落在三分屏的各个小分块的右上角,需要根据XE做一个重新确定最终的位置,计算逻辑如下:
[0196]定一个最小有效移动距离为1/6SW,即当XE-XS>1/6SW时认为这是一次有效的移动,才进行下一步移动位置的计算,否则窗口位置不变化。下面的计算是在移动距离有效的基础上进行的:
[0197]当W=1/3SW 时,
[0198]如果XE〈XS,表明向左移,左移的目标分块只能是第1、2两块,如果XE〈1/6SW,则认为目标分块是第I块,则设置XE = O ;否则目标分块是第2块,则设置XE = 1/3SW ;
[0199]如果XE>XS,表明向右移,左移的目标分块只能是第2、3两块,如果XE>1/2SW,则认为目标分块是第3块,则设置XE = 2/3SW ;否则目标分块是第2块,则设置XE = 1/3SW ;
[0200]其他情况下,设置XE = XS,即窗口位置不变。
[0201 ] 当W = 2/3SW时,2/3屏宽的窗口只能左右移动一次,且其X坐标只能是O或者1/3SW:
[0202]如果XE〈XS并且XS = 1/3SW,表示右边的2/3SW窗口向左移动,则设置XE = O ;
[0203]如果XE>XS并且XS = 0,表示左边2/3SW的窗口向右移动,则设置XE = 1/3SW ;
[0204]其他情况下,设置XE = XS,即窗口位置不变。
[0205]当W = SW时,设置XE = XS,即窗口位置不变。
[0206]其次是窗口的缩放,当识别到用户进行双击操作时,窗口缩放的计算逻辑如下:
[0207]当W= 1/3SW时,设置W = W+1/3SW,若X+2/3SW>SW,表明扩大后窗口超出了显示屏,需要重新设置X = X - 1/3屏宽;否则X不变;
[0208]当W = 2/3SW时,设置W = W+1/3SW,若X不为0,设置X为O ;否则X不变;
[0209]当W= SW 时,设置 W= 1/3SW,X 不变。
[0210]在进行了上述的窗口宽度及位置变化之后,即可调用WMS进行实际界面上的窗口重绘了,这一步只是调用WMS的相应系统接口即可完成。
[0211]虽然结合附图描述了本发明的实施方式,但是本领域的技术人员可以在所附权利要求的范围之内作出各种变形或修改,只要不超过本发明的权利要求所描述的保护范围,都应当在本发明的保护范围之内。
【权利要求】
1.一种基于Android操作系统的多窗口界面实现方法,其特征在于:所述系统包括包管理服务单元、活动管理服务单元、窗口管理服务单元,所述实现方法具体包括以下步骤: A、用户端启动新的应用窗口,对应的信息发送给活动管理服务单元; B、活动管理服务单元根据发送过来的信息解析出目标应用信息,校验启动权限,如校验成功,执行步骤C,如校验失败,启动失败; C、活动管理服务单元将目标应用信息告知窗口管理服务单元准备进行应用窗口的切换; D、活动管理服务单元启动新的应用; E、窗口管理服务单元根据新的应用窗口的配置信息为其分配位置和非全屏的大小; F、新的应用在分配的窗口中绘画自己的窗口界面,绘画完成后窗口管理服务单元将新的应用窗口显示出来,启动完成; G、在活动管理服务单元中设置一套管理应用的基础策略,实现应用窗口的应用操作需求。
2.如权利要求1所述的一种基于Android操作系统的多窗口界面实现方法,其特征在于,步骤A中启动新的应用窗口包括如下步骤: Al、启动系统,调用包管理服务单元,获取当前所有安装的应用包信息列表; A2、提取所有应用包信息中的所有应用图标及其对应的启动相关信息; A3、创建一个从图标到启动相关信息的Map关系列表; A4、创建一个系统窗口并将所有应用图标添加到窗口中; A5、对系统中应用的变化情况监听系统广播; A6、添加一个所有应用按钮到导航栏最左边; A7、若用户点击所有应用按钮,显示装有所有应用图标的系统窗口 ;若用户点击某个图标,通过图标到启动相关信息的Map关系列表找到该图标对应的启动相关信息; AS、调用活动管理服务单元,启动应用。
3.如权利要求2所述的一种基于Android操作系统的多窗口界面实现方法,其特征在于,步骤A5所述监听系统广播包括以下步骤:A51、收到系统应用包相关广播,判断广播类型;若广播类型为应用安装,则执行步骤A52 ;若广播类型为应用卸载,则执行步骤A53,若广播类型为应用升级,则执行步骤A54 ;A52、根据广播中的包信息调用包管理服务单元,提取新安装的应用包中所有图标及其对应的启动信息,若图标数量大于零,则将这些图标及其对应的启动信息加入到Map关系列表中;若图标数量小于零,则结束监听; A53、根据广播中的包信息删除Map列表关系列表中的所有与该包相关的Map兀素;A54、根据广播中的新包信息调用PMS提取新的应用包中所有图标及其对应的启动相关信息;遍历Map关系列表,与提取到的图标信息对比;删除在新包中不存在的图标Map元素,添加新包中新的图标及启动相关信息Map元素; A55、根据新的Map关系列表重建系统窗口,结束监听。
4.如权利要求1所述的一种基于Android操作系统的多窗口界面实现方法,其特征在于:步骤E中窗口管理服务单元根据新的应用窗口的配置信息为其分配位置和大小包括如下步骤: El、将屏幕固定为横屏模式,将纵坐标值固定为状态栏的高度; E2、判断应用窗口为横屏竖屏的属性,根据窗口属性计算应用窗口宽度和初始横坐标值; E3、设置一套竖屏配置项,当系统启动竖屏应用模式时,拷贝这套人竖屏配置项,以实现竖屏的应用强制在横屏上面正常显示。
5.根据权利要求4所述的一种基于Android操作系统的多窗口界面实现方法,其特征在于:步骤E2所述的计算方法包括: E21、计算应用窗口宽度,若应用窗口为竖屏,设置窗口宽度为三分之一横向屏宽;若应用窗口为横屏,设置窗口宽度为三分之二横向屏宽; E22、计算初始横坐标值,设置两个计数器,分别计数自系统启动以来系统打开过的横屏和竖屏应用窗口的数量,根据计数结果为新的窗口计算一个初始的横坐标;对于拖动窗口,根据当前焦点窗口的大小和位置,来确定新的应用窗口的最终横坐标值。
6.根据权利要求5所述的一种基于Android操作系统的多窗口界面实现方法,其特征在于: 步骤E22所述初始横坐标值的计算方法包括: 计数器计数自系统启动以来系统打开过的横屏和竖屏应用窗口的数量分别为CH和CP,横向屏宽为SW,窗口的初始横坐标为X,若应用窗口为竖屏,则:X= (CP Mod3)*1/3SW ;若应用窗口若为横屏,则:当(CH Mod 2) = O时,X = O ;当(CH Mod 2) = I时,X = 1/3SW ; 步骤E22所述最终横坐标值的计算方法包括: E221、获取当前焦点窗口的宽度和横坐标的值; E222、计算当前焦点窗口的宽度是否等于横向屏宽,若是,则焦点窗口为全屏宽,设定应用窗口的初始横坐标值为零;若否,则执行步骤E223 ; E223、计算应用窗口和当前焦点窗口的宽度是否都等于三分之二横向屏宽,若是,则说明应用窗口和焦点窗口相交,无需处理,结束计算;若否,则计算新窗口和焦点窗口是否相交,若不相交,则无需处理,结束计算;若相交,则执行步骤E224 ; E224、计算应用窗口的宽度是否等于三分之二横向屏宽,若是,如果应用窗口的初始横坐标值为零,则最终横坐标值为三分之一横向屏宽,如果应用窗口的初始横坐标值为三分之一横向屏宽,则最终横坐标值为零;若否,如果应用窗口的初始横坐标值为三分之二横向屏宽,则最终横坐标值为零,否则,最终横坐标值为初始横坐标值与三分之一横向屏宽之和; E225、再次计算新窗口和焦点窗口是否相交,若是,如果应用窗口的初始横坐标值为三分之二横向屏宽,则最终横坐标值为零,否则最终横坐标值为初始横坐标值与三分之一横向屏宽之和;若否,无需处理,结束计算。
7.根据权利要求4所述的一种基于Android操作系统的多窗口界面实现方法,其特征在于:步骤E3具体包括以下步骤: E31、判断应用程序窗口界面自身的方向配置项是否为竖屏,若是,系统生成一套竖屏的配置项;若否,系统生成一套横屏的配置项; E32、应用程序拷贝新生成的系统配置项; E33、应用程序根据新生成的系统配置项来遍历其资源文件,找到最匹配的那一套; E34、将最匹配的那一套资源文件用于界面显示。
8.根据权利要求1所述的一种基于Android操作系统的多窗口界面实现方法,其特征在于:步骤G所述应用操作包括打开、关闭、最小化和恢复应用窗口以及从导航栏图标切换焦点应用窗口,以及缩小、放大、拖动应用窗口和通过点击非焦点应用窗口内部来切换应用窗P。
9.根据权利要求8所述的一种基于Android操作系统的多窗口界面实现方法,其特征在于,所述打开应用窗口具体包括以下步骤: G11、在导航栏上显示当前所有打开应用的图标,对打开应用的个数进行限制; G12、活动管理服务单元收到开启应用窗口的请求,判断是否存在App栈,若存在,则在App栈中寻找该应用对应的App Task,如找到对应的App Task,将找到的App Task移动到App栈的顶部,如果该App Task的状态为Paused则将其设置为Started,否则执行步骤G3 ;若不存在,创建App栈,执行步骤G13 ; G13、创建一个新的App Task,设置Task状态为Started,将新的App Task加入到App栈的顶部; G14、将App栈设为焦点栈,将该App Task对应窗口设为焦点窗口 ; G15、显示新的应用窗口 ; G16、发送Task To Front广播并附带该Task相关信息,结束任务; 步骤G所述恢复应用窗口具体包括以下步骤: G21、活动管理服务单元收到移动Task到前台的请求,所述请求附带Task ID ; G22、根据Task ID在App栈中寻找对应的App Task,若找到,执行步骤G23,若未找到,结束任务; G23、将找到的App Task移动到App栈顶,如果所述App Task对应的应用窗口被隐藏则调用窗口显示单元显示它,如果所述App Task的状态为Paused则将其设置为Started ;G24、将所述App Task对应应用窗口设为焦点窗口 ; G25、发送Task To Front广播并附带该Task相关信息,结束任务; 步骤G所述最小化应用窗口具体包括以下步骤: G31、活动管理服务单元收到移动Task到后台的请求,所述请求附带Task ID ; G32、根据Task ID在App栈中寻找对应的App Task,若找到,执行步骤G33,若未找到,结束任务; G33、将找到的App Task移动到App栈底,如果该App Task的状态为Started则将其设直为Paused并调用窗口显不单兀隐减其窗口 ; G34、获取App栈顶的App Task,判断App Task状态是否为Started,若是,将该AppTask对应应用窗口设为焦点窗口 ;若否,将Home栈设为焦点栈,将Home Task对应桌面窗口设为焦点窗口; G35、发送Task To Front广播并附带该Task相关信息,结束任务; 步骤G所述关闭应用窗口具体包括以下步骤: G41、活动管理服务单元收到删除Task的请求,所述请求附带Task ID ; G42、根据Task ID在App栈中寻找对应的App Task,若找到,执行步骤G43,若未找到,结束任务; G43、如果找到的App Task的状态为Started则调用WMS隐藏其窗口,将该App Task移动从App栈删除; G44、获取App栈顶的App Task,判断App Task状态是否为Started,若是,将该AppTask对应应用窗口设为焦点窗口 ;若否,将Home栈设为焦点栈,将Home Task对应桌面窗口设为焦点窗口; G45、发送Task To Front广播并附带该Task相关信息,结束任务。
10.根据权利要求8所述的一种基于Android操作系统的多窗口界面实现方法,其特征在于: 所述缩小、放大、拖动应用窗口和通过点击非焦点应用窗口内部来切换应用窗口具体包括以下步骤: G51、设置一个全局的触摸输入事件监听器,用于监听屏幕上所有的触摸输入事件,如按下、移动、放手,同时获取到各个事件对应的点的坐标; G52、记录焦点窗口的上下左右的值,根据这些值判断触摸点是否落在了焦点窗口上,当触摸点落在了非应用窗口则不作处理,而当触摸点落在了焦点窗口内时,判断其是否是在焦点窗口距离上边N个pixel高度区域内,当落在焦点窗口上边N个pixel高度区域内时,即可进行拖动或者放大缩小,否则当落在非焦点窗口内时,则从上到下遍历当前所有的非焦点窗口,以找到该点落在哪个应用窗口内,找到了而且该窗口不是桌面窗口,则调用AMS将对应的task移动到前台,这样即切换了焦点窗口。
【文档编号】G06F3/0481GK104461242SQ201410742479
【公开日】2015年3月25日 申请日期:2014年12月8日 优先权日:2014年12月8日
【发明者】祁成红 申请人:深圳市嘉乐派科技有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1