国产精品1024永久观看,大尺度欧美暖暖视频在线观看,亚洲宅男精品一区在线观看,欧美日韩一区二区三区视频,2021中文字幕在线观看

  • <option id="fbvk0"></option>
    1. <rt id="fbvk0"><tr id="fbvk0"></tr></rt>
      <center id="fbvk0"><optgroup id="fbvk0"></optgroup></center>
      <center id="fbvk0"></center>

      <li id="fbvk0"><abbr id="fbvk0"><dl id="fbvk0"></dl></abbr></li>

      一種基于Android操作系統(tǒng)的多窗口界面實(shí)現(xiàn)方法

      文檔序號:6637677閱讀:440來源:國知局
      一種基于Android操作系統(tǒng)的多窗口界面實(shí)現(xiàn)方法
      【專利摘要】本發(fā)明公開了一種基于Android操作系統(tǒng)的多窗口界面實(shí)現(xiàn)方法,所述系統(tǒng)包括包管理服務(wù)單元、活動管理服務(wù)單元、窗口管理服務(wù)單元,所述實(shí)現(xiàn)方法包括:用戶端啟動新的應(yīng)用窗口,對應(yīng)的信息發(fā)送給活動管理服務(wù)單元;活動管理服務(wù)單元校驗(yàn)啟動權(quán)限;活動管理服務(wù)單元進(jìn)行應(yīng)用窗口的切換;活動管理服務(wù)單元啟動新的應(yīng)用;窗口管理服務(wù)單元分配位置和大小;窗口管理服務(wù)單元顯示新的應(yīng)用窗口。本發(fā)明可實(shí)現(xiàn)在Android設(shè)備屏幕上面同時(shí)顯示多個(gè)應(yīng)用窗口,而且用戶可以在不退出當(dāng)前應(yīng)用的情況下打開新的應(yīng)用。
      【專利說明】—種基于Android操作系統(tǒng)的多窗口界面實(shí)現(xiàn)方法

      【技術(shù)領(lǐng)域】
      [0001]本發(fā)明涉及移動通訊領(lǐng)域,尤其涉及一種基于Android操作系統(tǒng)的多窗口界面實(shí)現(xiàn)方法。

      【背景技術(shù)】
      [0002]目前Android系統(tǒng)的所有應(yīng)用只能單個(gè)窗口全屏顯示,也就是說屏幕上不能同時(shí)顯示兩個(gè)以上的應(yīng)用,這樣當(dāng)用戶需要從一個(gè)應(yīng)用暫時(shí)切換到另一個(gè)應(yīng)用時(shí),必需先退出當(dāng)前應(yīng)用,然后再進(jìn)入到另一個(gè)應(yīng)用,造成很大的不方便,例如當(dāng)前用戶正在看電影,然后收到微信消息,用戶想要查看微信消息,則要從狀態(tài)欄打開微信并退出當(dāng)前的視頻界面,完成微信消息的回復(fù)后,需要按返回鍵才能再次回到視頻界面,而此時(shí)可能需要重新緩沖視頻,整個(gè)過程用戶體驗(yàn)很差。
      [0003]Android操作系統(tǒng)架構(gòu)從上層應(yīng)用到底層內(nèi)核總共分五層:應(yīng)用層、應(yīng)用框架層、核心庫層、硬件抽象層、Linux內(nèi)核層,Android操作系統(tǒng)的基礎(chǔ)是Linux操作系統(tǒng),眾所周知Linux系統(tǒng)是支持多進(jìn)程的操作系統(tǒng),也就是說可以同時(shí)運(yùn)行多個(gè)應(yīng)用程序,而基于Linux內(nèi)核開發(fā)的桌面系統(tǒng)都是支持多窗口的,由于Android系統(tǒng)最初開發(fā)出來是用于手機(jī)等小屏的移動終端設(shè)備,所以Android系統(tǒng)的在應(yīng)用框架層的實(shí)現(xiàn)上對系統(tǒng)做了限制,使得系統(tǒng)運(yùn)行時(shí)設(shè)備屏幕上同時(shí)只能有一個(gè)應(yīng)用的界面與用戶進(jìn)行交互。事實(shí)上Android系統(tǒng)的依然保留著Linux系統(tǒng)的多進(jìn)程特性,即從一個(gè)應(yīng)用切換到另一個(gè)應(yīng)用時(shí),表面上看好像是退出了前一個(gè)應(yīng)用,但實(shí)際上該應(yīng)用的進(jìn)程仍然在后臺運(yùn)行,只是前端的界面被隱藏了,這樣,當(dāng)再次切換到該應(yīng)用時(shí)就不必重新啟動進(jìn)程,從而加快了啟動的速度,雖然可以降低應(yīng)用切換對用戶體驗(yàn)的不良影響,但依然沒有解決上述現(xiàn)有技術(shù)的問題,在手機(jī)這種小屏的設(shè)備上面,用戶也許可以接受這個(gè)問題,但是在8寸以上的較大屏的設(shè)備上,應(yīng)該以更好的方式呈現(xiàn)應(yīng)用窗口,解決該問題。
      [0004]因此,本發(fā)明對Android系統(tǒng)的應(yīng)用框架層進(jìn)行改造,使得其支持多個(gè)應(yīng)用窗口同時(shí)顯示在設(shè)備屏幕上,這樣就可以充分利用較大屏的設(shè)備屏幕空間,同時(shí)解決現(xiàn)有技術(shù)所存在的問題。


      【發(fā)明內(nèi)容】

      [0005]本發(fā)明的主要目的在于提供一種基于Android操作系統(tǒng)的多窗口界面實(shí)現(xiàn)方法,可實(shí)現(xiàn)在Android設(shè)備屏幕上面同時(shí)顯示多個(gè)應(yīng)用窗口,而且用戶可以在不退出當(dāng)前應(yīng)用的情況下打開新的應(yīng)用,給用戶一個(gè)非常好的操作體驗(yàn)。
      [0006]為實(shí)現(xiàn)上述目的,本發(fā)明提出的一種基于Android操作系統(tǒng)的多窗口界面實(shí)現(xiàn)方法,所述系統(tǒng)包括包管理服務(wù)單元、活動管理服務(wù)單元、窗口管理服務(wù)單元,所述實(shí)現(xiàn)方法具體包括以下步驟:
      [0007]A、用戶端啟動新的應(yīng)用窗口,對應(yīng)的信息發(fā)送給活動管理服務(wù)單元;
      [0008]B、活動管理服務(wù)單元根據(jù)發(fā)送過來的信息解析出目標(biāo)應(yīng)用信息,校驗(yàn)啟動權(quán)限,如校驗(yàn)成功,執(zhí)行步驟C,如校驗(yàn)失敗,啟動失敗;
      [0009]C、活動管理服務(wù)單元將目標(biāo)應(yīng)用信息告知窗口管理服務(wù)單元準(zhǔn)備進(jìn)行應(yīng)用窗口的切換;
      [0010]D、活動管理服務(wù)單元啟動新的應(yīng)用;
      [0011]E、窗口管理服務(wù)單元根據(jù)新的應(yīng)用窗口的配置信息為其分配位置和非全屏的大小;
      [0012]F、新的應(yīng)用在分配的窗口中繪畫自己的窗口界面,繪畫完成后窗口管理服務(wù)單元將新的應(yīng)用窗口顯不出來,啟動完成;
      [0013]G、在活動管理服務(wù)單元中設(shè)置一套管理應(yīng)用的基礎(chǔ)策略,實(shí)現(xiàn)應(yīng)用窗口的應(yīng)用操作需求。
      [0014]進(jìn)一步的,步驟A中啟動新的應(yīng)用窗口包括如下步驟:
      [0015]Al、啟動系統(tǒng),調(diào)用包管理服務(wù)單元,獲取當(dāng)前所有安裝的應(yīng)用包信息列表;
      [0016]A2、提取所有應(yīng)用包信息中的所有應(yīng)用圖標(biāo)及其對應(yīng)的啟動相關(guān)信息;
      [0017]A3、創(chuàng)建一個(gè)從圖標(biāo)到啟動相關(guān)信息的Map關(guān)系列表;
      [0018]A4、創(chuàng)建一個(gè)系統(tǒng)窗口并將所有應(yīng)用圖標(biāo)添加到窗口中;
      [0019]A5、對系統(tǒng)中應(yīng)用的變化情況監(jiān)聽系統(tǒng)廣播;
      [0020]A6、添加一個(gè)所有應(yīng)用按鈕到導(dǎo)航欄最左邊;
      [0021]A7、若用戶點(diǎn)擊所有應(yīng)用按鈕,顯示裝有所有應(yīng)用圖標(biāo)的系統(tǒng)窗口 ;若用戶點(diǎn)擊某個(gè)圖標(biāo),通過圖標(biāo)到啟動相關(guān)信息的Map關(guān)系列表找到該圖標(biāo)對應(yīng)的啟動相關(guān)信息;
      [0022]A8、調(diào)用活動管理服務(wù)單元,啟動應(yīng)用。
      [0023]進(jìn)一步的,步驟A5所述監(jiān)聽系統(tǒng)廣播包括以下步驟:
      [0024]A51、收到系統(tǒng)應(yīng)用包相關(guān)廣播,判斷廣播類型;若廣播類型為應(yīng)用安裝,則執(zhí)行步驟A52 ;若廣播類型為應(yīng)用卸載,則執(zhí)行步驟A53,若廣播類型為應(yīng)用升級,則執(zhí)行步驟A54 ;
      [0025]A52、根據(jù)廣播中的包信息調(diào)用包管理服務(wù)單元,提取新安裝的應(yīng)用包中所有圖標(biāo)及其對應(yīng)的啟動信息,若圖標(biāo)數(shù)量大于零,則將這些圖標(biāo)及其對應(yīng)的啟動信息加入到Map關(guān)系列表中;若圖標(biāo)數(shù)量小于零,則結(jié)束監(jiān)聽;
      [0026]A53、根據(jù)廣播中的包信息刪除Map列表關(guān)系列表中的所有該包相關(guān)的Map元素;
      [0027]A54、根據(jù)廣播中的新包信息調(diào)用PMS提取新的應(yīng)用包中所有圖標(biāo)及其對應(yīng)的啟動相關(guān)信息;遍歷Map關(guān)系列表,與提取到的圖標(biāo)信息對比;刪除在新包中不存在的圖標(biāo)Map元素,添加新包中新的圖標(biāo)及啟動相關(guān)信息Map元素;
      [0028]A55、根據(jù)新的Map關(guān)系列表重建系統(tǒng)窗口,結(jié)束監(jiān)聽。
      [0029]進(jìn)一步的,步驟E中窗口管理服務(wù)單元根據(jù)新的應(yīng)用窗口的配置信息為其分配位置和大小包括如下步驟:
      [0030]E1、將屏幕固定為橫屏模式,將縱坐標(biāo)值固定為狀態(tài)欄的高度;
      [0031]E2、判斷應(yīng)用窗口為橫屏豎屏的屬性,根據(jù)窗口屬性計(jì)算應(yīng)用窗口寬度和初始橫坐標(biāo)值;
      [0032]E3、設(shè)置一套豎屏配置項(xiàng),當(dāng)系統(tǒng)啟動豎屏應(yīng)用模式時(shí),拷貝這套豎屏配置項(xiàng),以實(shí)現(xiàn)豎屏的應(yīng)用強(qiáng)制在橫屏上面正常顯示。
      [0033]進(jìn)一步的,步驟E2所述的計(jì)算方法包括:
      [0034]E21、計(jì)算應(yīng)用窗口寬度,若應(yīng)用窗口為豎屏,設(shè)置窗口寬度為三分之一橫向屏寬;若應(yīng)用窗口為橫屏,設(shè)置窗口寬度為三分之二橫向屏寬;
      [0035]E22、計(jì)算初始橫坐標(biāo)值,設(shè)置兩個(gè)計(jì)數(shù)器,分別計(jì)數(shù)自系統(tǒng)啟動以來的系統(tǒng)打開過的橫屏和豎屏應(yīng)用窗口的數(shù)量,根據(jù)計(jì)數(shù)結(jié)果為新的窗口計(jì)算一個(gè)初始的橫坐標(biāo),對于拖動窗口,根據(jù)當(dāng)前焦點(diǎn)窗口的大小和位置,來確定新的應(yīng)用窗口的最終橫坐標(biāo)值”。
      [0036]進(jìn)一步的,步驟E22所述為新窗口計(jì)算初始橫坐標(biāo)的計(jì)算方法包括:
      [0037]計(jì)數(shù)器計(jì)數(shù)自系統(tǒng)啟動以來的系統(tǒng)打開過的橫屏和豎屏應(yīng)用窗口的數(shù)量分別為CH和CP,橫向屏寬為SW,窗口的初始橫坐標(biāo)為X,若應(yīng)用窗口若為豎屏,則:X= (CP Mod3)*1/3SW ;
      [0038]若應(yīng)用窗口若為橫屏,則:當(dāng)(CH Mod 2) = O時(shí),X = O ;當(dāng)(CH Mod 2) = I時(shí),X=1/3SW。
      [0039]進(jìn)一步的,步驟E22所述最終橫坐標(biāo)值的計(jì)算方法包括:
      [0040]E221、獲取當(dāng)前焦點(diǎn)窗口的寬度和橫坐標(biāo)的值;
      [0041]E222、計(jì)算當(dāng)前焦點(diǎn)窗口的寬度是否等于橫向屏寬,若是,則焦點(diǎn)窗口為全屏寬,設(shè)定應(yīng)用窗口的初始橫坐標(biāo)值為零;若否,則執(zhí)行步驟E223 ;
      [0042]E223、計(jì)算應(yīng)用窗口和當(dāng)前焦點(diǎn)窗口的寬度是否都等于三分之二橫向屏寬,若是,則說明應(yīng)用窗口和焦點(diǎn)窗口相交,無需處理,結(jié)束計(jì)算;若否,則計(jì)算新窗口和焦點(diǎn)窗口是否相交,若不相交,則無需處理,結(jié)束計(jì)算;若相交,則執(zhí)行步驟E224 ;
      [0043]E224、計(jì)算應(yīng)用窗口的寬度是否等于三分之二橫向屏寬,若是,如果應(yīng)用窗口的初始橫坐標(biāo)值為零,則最終橫坐標(biāo)值為三分之一橫向屏寬,如果應(yīng)用窗口的初始橫坐標(biāo)值為三分之一橫向屏寬,則最終橫坐標(biāo)值為零;若否,如果應(yīng)用窗口的初始橫坐標(biāo)值為三分之二橫向屏寬,則最終橫坐標(biāo)值為零,否則,最終橫坐標(biāo)值為初始橫坐標(biāo)值與三分之一橫向屏寬之和。
      [0044]E225、再次計(jì)算新窗口和焦點(diǎn)窗口是否相交,若是,如果應(yīng)用窗口的初始橫坐標(biāo)值為三分之二橫向屏寬,則最終橫坐標(biāo)值為零,否則最終橫坐標(biāo)值為初始橫坐標(biāo)值與三分之一橫向屏寬之和;若否,無需處理,結(jié)束計(jì)算。
      [0045]進(jìn)一步的,步驟E3具體包括以下步驟:
      [0046]E31、判斷應(yīng)用程序窗口界面自身的方向配置項(xiàng)是否為豎屏,若是,系統(tǒng)生成一套豎屏的配置項(xiàng);若否,系統(tǒng)生成一套橫屏的配置項(xiàng);
      [0047]E32、應(yīng)用程序拷貝新生成的系統(tǒng)配置項(xiàng);
      [0048]E33、應(yīng)用程序根據(jù)新生成的系統(tǒng)配置項(xiàng)來遍歷其資源文件,找到最匹配的那一套;
      [0049]E34、將最匹配的那一套資源文件用于界面顯示。
      [0050]優(yōu)選地,步驟G所述應(yīng)用操作包括打開、關(guān)閉、最小化和恢復(fù)應(yīng)用窗口以及從導(dǎo)航欄圖標(biāo)切換焦點(diǎn)應(yīng)用窗口,以及縮小、放大、拖動應(yīng)用窗口和通過點(diǎn)擊非焦點(diǎn)應(yīng)用窗口內(nèi)部來切換應(yīng)用窗口;
      [0051]所述打開應(yīng)用窗口具體包括以下步驟:
      [0052]G11、在導(dǎo)航欄上顯示當(dāng)前所有打開應(yīng)用的圖標(biāo),對打開應(yīng)用的個(gè)數(shù)進(jìn)行限制;
      [0053]G12、活動管理服務(wù)單元收到開啟應(yīng)用窗口的請求,判斷是否存在App棧(用來管理非桌面應(yīng)用的棧),若存在,則在App棧中尋找該應(yīng)用對應(yīng)的App Task (非桌面應(yīng)用的運(yùn)行中的應(yīng)用),如找到對應(yīng)的App Task,將找到的App Task移動到App棧的頂部,如果該App Task的狀態(tài)為Paused (停止)則將其設(shè)置為Started (開始),否則執(zhí)行步驟G3 ;若不存在,創(chuàng)建App棧,執(zhí)行步驟G13 ;
      [0054]G13、創(chuàng)建一個(gè)新的App Task,設(shè)置Task (運(yùn)行中的應(yīng)用)狀態(tài)為Started,將新的App Task加入到App棧的頂部;
      [0055]G14、將App棧設(shè)為焦點(diǎn)棧,將該App Task對應(yīng)窗口設(shè)為焦點(diǎn)窗口 ;
      [0056]G15、顯示新的應(yīng)用窗口 ;
      [0057]G16、發(fā)送Task To Front (任務(wù)到前臺)廣播并附帶該Task相關(guān)信息,結(jié)束任務(wù);
      [0058]步驟G所述恢復(fù)應(yīng)用窗口具體包括以下步驟:
      [0059]G21、活動管理服務(wù)單元收到移動Task到前臺的請求,所述請求附帶Task ID (運(yùn)行中的應(yīng)用的識別號);
      [0060]G22、根據(jù)Task ID在App棧中尋找對應(yīng)的App Task,若找到,執(zhí)行步驟G23,若未找到,結(jié)束任務(wù);
      [0061]G23、將找到的App Task移動到App棧頂,如果所述App Task對應(yīng)的應(yīng)用窗口被隱藏則調(diào)用窗口顯示單元顯示它,如果所述App Task的狀態(tài)為Paused則將其設(shè)置為Started ;
      [0062]G24、將所述App Task對應(yīng)應(yīng)用窗口設(shè)為焦點(diǎn)窗口 ;
      [0063]G25、發(fā)送Task To Front廣播并附帶該Task相關(guān)信息,結(jié)束任務(wù);
      [0064]步驟G所述最小化應(yīng)用窗口具體包括以下步驟:
      [0065]G31、活動管理服務(wù)單元收到移動Task到后臺的請求,所述請求附帶Task ID ;
      [0066]G32、根據(jù)Task ID在App棧中尋找對應(yīng)的App Task,若找到,執(zhí)行步驟G33,若未找到,結(jié)束任務(wù);
      [0067]G33、將找到的App Task移動到App棧底,如果該App Task的狀態(tài)為Started則將其設(shè)置為Paused并調(diào)用窗口顯示單元隱藏其窗口 ;
      [0068]G34、獲取App棧頂?shù)腁pp Task,判斷App Task狀態(tài)是否為Started,若是,將該AppTask對應(yīng)應(yīng)用窗口設(shè)為焦點(diǎn)窗口 ;若否,將Home棧(用來管理桌面應(yīng)用的Task棧)設(shè)為焦點(diǎn)棧,將Home Task(桌面應(yīng)用運(yùn)行的Task)對應(yīng)桌面窗口設(shè)為焦點(diǎn)窗口 ;
      [0069]G35、發(fā)送Task To Front廣播并附帶該Task相關(guān)信息,結(jié)束任務(wù);
      [0070]步驟G所述關(guān)閉應(yīng)用窗口具體包括以下步驟:
      [0071]G41、活動管理服務(wù)單元收到刪除Task的請求,所述請求附帶Task ID ;
      [0072]G42、根據(jù)Task ID在App棧中尋找對應(yīng)的App Task,若找到,執(zhí)行步驟G43,若未找到,結(jié)束任務(wù);
      [0073]G43、如果找到的App Task的狀態(tài)為Started則調(diào)用WMS隱藏其窗口,將該AppTask移動從App棧刪除;
      [0074]G44、獲取App棧頂?shù)腁pp Task,判斷App Task狀態(tài)是否為Started,若是,將該App Task對應(yīng)應(yīng)用窗口設(shè)為焦點(diǎn)窗口 ;若否,將Home棧(用來管理桌面應(yīng)用的Task棧)設(shè)為焦點(diǎn)棧,將Home Task對應(yīng)桌面窗口設(shè)為焦點(diǎn)窗口 ;
      [0075]G45、發(fā)送Task To Front廣播并附帶該Task相關(guān)信息,結(jié)束任務(wù)。
      [0076]步驟G所述縮小、放大、拖動應(yīng)用窗口和通過點(diǎn)擊非焦點(diǎn)應(yīng)用窗口內(nèi)部來切換應(yīng)用窗口具體包括以下步驟:
      [0077]G51、設(shè)置一個(gè)全局的觸摸輸入事件監(jiān)聽器,用于監(jiān)聽屏幕上所有的觸摸輸入事件,如按下、移動、放手,同時(shí)獲取到各個(gè)事件對應(yīng)的點(diǎn)的坐標(biāo);
      [0078]G52、記錄焦點(diǎn)窗口的上下左右的值,根據(jù)這些值判斷觸摸點(diǎn)是否落在了焦點(diǎn)窗口上,當(dāng)觸摸點(diǎn)落在了非應(yīng)用窗口則不作處理,而當(dāng)觸摸點(diǎn)落在了焦點(diǎn)窗口內(nèi)時(shí),判斷其是否是在焦點(diǎn)窗口距離上邊N個(gè)pixel (像素)高度區(qū)域內(nèi),當(dāng)落在焦點(diǎn)窗口上邊N個(gè)pixel高度區(qū)域內(nèi)時(shí),即可進(jìn)行拖動或者放大縮小,否則當(dāng)落在非焦點(diǎn)窗口內(nèi)時(shí),則從上到下遍歷當(dāng)前所有的非焦點(diǎn)窗口,以找到該點(diǎn)落在哪個(gè)應(yīng)用窗口內(nèi),找到了而且該窗口不是桌面窗口,則調(diào)用AMS將對應(yīng)的task移動到前臺,這樣即切換了焦點(diǎn)窗口。
      [0079]本發(fā)明通過對Android系統(tǒng)的應(yīng)用框架層進(jìn)行改造,使得其支持多個(gè)應(yīng)用窗口同時(shí)顯示在設(shè)備屏幕上,這樣就可以充分利用較大屏的設(shè)備屏幕空間,同時(shí)解決用戶體驗(yàn)差的問題,由于采用上述方法,使本發(fā)明具有以下優(yōu)點(diǎn):
      [0080]1、多個(gè)應(yīng)用窗口可以同時(shí)顯示在屏幕上,且互不干擾;一定程度上避免了窗口的重疊問題,充分利用有限的屏幕空間;
      [0081]2、用戶可以在不用退出當(dāng)前應(yīng)用窗口的情況下打開新的應(yīng)用窗口 ;
      [0082]3、窗口的拖動、縮放、最小化和恢復(fù)、關(guān)閉等操作方便簡單,只需要單個(gè)手指就可以輕松完成。
      [0083]本發(fā)明的特征及優(yōu)點(diǎn)將通過實(shí)施例結(jié)合附圖進(jìn)行詳細(xì)說明。

      【專利附圖】

      【附圖說明】
      [0084]圖1為本發(fā)明的系統(tǒng)模塊關(guān)系圖;
      [0085]圖2為本發(fā)明的總流程圖;
      [0086]圖3為本發(fā)明的啟動應(yīng)用窗口的流程圖;
      [0087]圖4為本發(fā)明的監(jiān)聽廣播的流程圖;
      [0088]圖5為本發(fā)明為新的應(yīng)用窗口分配位置和大小的流程圖;
      [0089]圖6為現(xiàn)有豎屏應(yīng)用在橫屏上顯示的流程圖;
      [0090]圖7為本發(fā)明豎屏應(yīng)用在橫屏上顯示的流程圖;
      [0091]圖8為本發(fā)明打開窗口的流程圖;
      [0092]圖9為本發(fā)明恢復(fù)窗口的流程圖;
      [0093]圖10為本發(fā)明最小化窗口的流程圖;
      [0094]圖11為本發(fā)明關(guān)閉窗口的流程圖;
      [0095]圖12為本發(fā)明的系統(tǒng)UI處理廣播的流程圖;
      [0096]圖13為本發(fā)明處理用戶觸摸動作的流程圖;
      [0097]圖14為本發(fā)明切換點(diǎn)窗口的流程圖;
      [0098]圖15為本發(fā)明圖14中“根據(jù)手指的下一步操作來做出響應(yīng)”這一步驟的實(shí)現(xiàn)流程圖;
      [0099]圖16為本發(fā)明識別單手指滑動操作的流程圖;
      [0100]圖17為本發(fā)明識別雙擊操作的流程圖。

      【具體實(shí)施方式】
      [0101]為了使本發(fā)明的目的、技術(shù)方案及優(yōu)點(diǎn)更加清楚明白,以下結(jié)合附圖及實(shí)施例,對本發(fā)明進(jìn)行進(jìn)一步詳細(xì)說明。應(yīng)當(dāng)理解,此處所描述的具體實(shí)施例僅僅用以解釋本發(fā)明,并不用于限定本發(fā)明。
      [0102]如圖1所示,本發(fā)明包括:
      [0103]包管理服務(wù)Package Manager Service (PMS)單元:Android系統(tǒng)的應(yīng)用程序是以.apk文件的形式提供的,而這種文件在系統(tǒng)中被安裝后是以包(Package)的形式被管理的,系統(tǒng)有一個(gè)專門的服務(wù)叫包管理服務(wù)(Package Manager Service)負(fù)責(zé)管理系統(tǒng)中所有應(yīng)用程序的包,包括包文件的安裝路徑、包內(nèi)的各種配置、資源文件等;
      [0104]活動管理服務(wù)Act ivi ty Manager Service (AMS)單元:Android系統(tǒng)中應(yīng)用程序的用戶界面是以活動(Act ivi ty)的形式存在的,一個(gè)Act ivi ty對象對應(yīng)一個(gè)窗口頁面,系統(tǒng)有一個(gè)專門服務(wù)叫活動管理服務(wù)(Act ivi ty Manager Service)負(fù)責(zé)管理系統(tǒng)所有的Act ivi ty對象,包括啟動、暫停、停止、結(jié)束等等整個(gè)生命周期。同時(shí),AMS還負(fù)責(zé)管理應(yīng)用進(jìn)程的啟動、停止、OOM參數(shù)設(shè)置等;
      [0105]窗口管理服務(wù)Window Manager Service (WMS)單元:窗口管理服務(wù)是負(fù)責(zé)窗口(Window)對象的管理的專門服務(wù),一個(gè)窗口對應(yīng)上面的一個(gè)Act ivi ty,兩者的區(qū)別在于Act ivi ty更多的是實(shí)現(xiàn)程序邏輯、保存配置信息,而Window則更多的是窗口的顯示、隱藏狀態(tài)、大小、位置等方面的信息;
      [0106]現(xiàn)有的系統(tǒng)從一個(gè)應(yīng)用切換到另一個(gè)應(yīng)用時(shí),AMS主動暫停當(dāng)前應(yīng)用并隱藏了其窗口,這就是為什么切換應(yīng)用時(shí)當(dāng)前應(yīng)用會退出的原因。而在WMS為新的應(yīng)用窗口分配大小和位置這一步驟中,現(xiàn)有的Android系統(tǒng)做法是窗口寬度即為屏寬,而窗口高度會根據(jù)應(yīng)用窗口的配置可能排除或是加上狀態(tài)欄高度和導(dǎo)航欄高度,但總體來說,新的應(yīng)用窗口占滿了屏幕所有可用空間,這也是應(yīng)用全屏顯示的原因。所以,根據(jù)以上兩個(gè)原因,本發(fā)明首先去掉“AMS主動暫停當(dāng)前應(yīng)用并隱藏其窗口”相關(guān)步驟,然后在“WMS為新的應(yīng)用分配窗口位置及大小”時(shí)不使用全屏的大小,且窗口位置不一樣,這樣即可完成一個(gè)屏幕顯示多個(gè)窗口的功能,如圖2所示,為本發(fā)明的總體流程圖,實(shí)現(xiàn)屏幕上同時(shí)顯示多個(gè)應(yīng)用窗口的,具體包括以下步驟:
      [0107]A、用戶端啟動新的應(yīng)用窗口,對應(yīng)的信息發(fā)送給活動管理服務(wù)單元;
      [0108]B、活動管理服務(wù)單元根據(jù)發(fā)送過來的信息解析出目標(biāo)應(yīng)用信息,校驗(yàn)啟動權(quán)限,如校驗(yàn)成功,執(zhí)行步驟C,如校驗(yàn)失敗,啟動失??;
      [0109]C、活動管理服務(wù)單元將目標(biāo)應(yīng)用信息告知窗口管理服務(wù)單元準(zhǔn)備進(jìn)行應(yīng)用窗口的切換;
      [0110]D、活動管理服務(wù)單元啟動新的應(yīng)用;
      [0111]E、窗口管理服務(wù)單元根據(jù)新的應(yīng)用窗口的配置信息為其分配位置和非全屏的大小;
      [0112]F、新的應(yīng)用在分配的窗口中繪畫自己的窗口界面,繪畫完成后窗口管理服務(wù)單元將新的應(yīng)用窗口顯不出來,啟動完成;
      [0113]G、在活動管理服務(wù)單元中設(shè)置一套管理應(yīng)用的基礎(chǔ)策略,實(shí)現(xiàn)應(yīng)用窗口的應(yīng)用操作需求。
      [0114]下面來介紹一下桌面應(yīng)用(Launcher) , Android系統(tǒng)的桌面應(yīng)用是一種特殊的應(yīng)用,是系統(tǒng)啟動后第一個(gè)打開的應(yīng)用,其主要功能就類似于Windows系統(tǒng)的桌面一樣,當(dāng)一個(gè)應(yīng)用被安裝后可以在桌面上放置一個(gè)圖標(biāo),通過點(diǎn)擊這個(gè)圖標(biāo)可以從桌面啟動該應(yīng)用。不過桌面應(yīng)用本質(zhì)上還是一個(gè)Android應(yīng)用,而所謂的桌面本質(zhì)上也是一個(gè)應(yīng)用窗口,在桌面上點(diǎn)擊一個(gè)圖標(biāo)啟動一個(gè)應(yīng)用后,其實(shí)也就是從桌面應(yīng)用切換到所啟動的應(yīng)用,這樣來說,桌面其實(shí)是被暫停了,所以,當(dāng)我需要打開其他應(yīng)用時(shí)需要先回到桌面,然后點(diǎn)擊另一個(gè)圖標(biāo)才能打開另一個(gè)應(yīng)用,這就是為什么從一個(gè)應(yīng)用切換到另一個(gè)應(yīng)用時(shí)需要退出先退出當(dāng)前應(yīng)用的主要原因。既然如此,如果能有一個(gè)窗口可以在不退出當(dāng)前應(yīng)用的情況下顯示出來,并且窗口中放置著所有應(yīng)用的圖標(biāo),點(diǎn)擊其中一個(gè)圖標(biāo)即可啟動新的應(yīng)用,就可以解決上述切換的問題了。好在Android系統(tǒng)的窗口分了系統(tǒng)窗口和應(yīng)用窗口兩種層級的窗口,系統(tǒng)窗口是可以顯示在應(yīng)用窗口的頂層而不影響應(yīng)用窗口的,狀態(tài)欄和導(dǎo)航欄就是兩個(gè)系統(tǒng)級的窗口,狀態(tài)欄的下拉框也是系統(tǒng)窗口。同時(shí)應(yīng)用的圖標(biāo)也都是可以通過調(diào)用PMS來獲得,這樣兩個(gè)條件都具備了,我們就可以實(shí)現(xiàn)一個(gè)方便快捷的啟動應(yīng)用的方法了。具體做法就是,在導(dǎo)航欄左邊添加一個(gè)按鈕,點(diǎn)擊該按鈕時(shí)即顯示一個(gè)系統(tǒng)級窗口,里面以網(wǎng)格形式放置著所有應(yīng)用的圖標(biāo),點(diǎn)擊某個(gè)圖標(biāo)即可啟動對應(yīng)的應(yīng)用,如圖3所示,步驟A所述啟動新的應(yīng)用窗口包括以下步驟:
      [0115]Al、啟動系統(tǒng),調(diào)用包管理服務(wù)單元,獲取當(dāng)前所有安裝的應(yīng)用包信息列表;
      [0116]A2、提取所有應(yīng)用包信息中的所有應(yīng)用圖標(biāo)及其對應(yīng)的啟動相關(guān)信息;
      [0117]A3、創(chuàng)建一個(gè)從圖標(biāo)到啟動相關(guān)信息的Map關(guān)系列表;
      [0118]A4、創(chuàng)建一個(gè)系統(tǒng)窗口并將所有應(yīng)用圖標(biāo)添加到窗口中;
      [0119]A5、對系統(tǒng)中應(yīng)用的變化情況監(jiān)聽系統(tǒng)廣播;
      [0120]A6、添加一個(gè)所有應(yīng)用按鈕到導(dǎo)航欄最左邊;
      [0121]A7、若用戶點(diǎn)擊所有應(yīng)用按鈕,顯示裝有所有應(yīng)用圖標(biāo)的系統(tǒng)窗口 ;若用戶點(diǎn)擊某個(gè)圖標(biāo),通過圖標(biāo)到啟動相關(guān)信息的Map關(guān)系列表找到該圖標(biāo)對應(yīng)的啟動相關(guān)信息;
      [0122]AS、調(diào)用活動管理服務(wù)單元,啟動應(yīng)用。
      [0123]圖3中步驟A2“提取所有應(yīng)用包的所有圖標(biāo)及其對應(yīng)的啟動相關(guān)信息”,此處需要解釋一下,Andro i d的每個(gè)應(yīng)用中可能包含多個(gè)啟動圖標(biāo),這些圖標(biāo)分別會對應(yīng)不同的窗口界面,也有可能沒有啟動圖標(biāo),這種就是屬于后臺的服務(wù)型應(yīng)用,沒有界面的應(yīng)用。
      [0124]圖3所示的流程是一個(gè)啟動應(yīng)用的主流程,窗口所列出的應(yīng)用僅僅是系統(tǒng)啟動時(shí),系統(tǒng)中已經(jīng)存在的應(yīng)用,而當(dāng)系統(tǒng)啟動后,還會有應(yīng)用的安裝、卸載、升級等情況,這些可能會造成窗口中圖標(biāo)的增刪改,而Android系統(tǒng)在有應(yīng)用安裝、卸載和升級時(shí)會發(fā)送相應(yīng)的廣播及相關(guān)信息出來,因此我們可以監(jiān)聽系統(tǒng)廣播來做相應(yīng)的處理,如圖4所示,步驟A5所述監(jiān)聽系統(tǒng)廣播包括以下步驟:
      [0125]A51、收到系統(tǒng)應(yīng)用包相關(guān)廣播,判斷廣播類型;若廣播類型為應(yīng)用安裝,則執(zhí)行步驟A52 ;若廣播類型為應(yīng)用卸載,則執(zhí)行步驟A53,若廣播類型為應(yīng)用升級,則執(zhí)行步驟A54 ;
      [0126]A52、根據(jù)廣播中的包信息調(diào)用包管理服務(wù)單元,提取新安裝的應(yīng)用包中所有圖標(biāo)及其對應(yīng)的啟動信息,若圖標(biāo)數(shù)量大于零,則將這些圖標(biāo)及其對應(yīng)的啟動信息加入到Map關(guān)系列表中;若圖標(biāo)數(shù)量小于零,則結(jié)束監(jiān)聽;
      [0127]A53、根據(jù)廣播中的包信息刪除Map列表關(guān)系列表中的所有該包相關(guān)的Map元素;
      [0128]A54、根據(jù)廣播中的新包信息調(diào)用PMS提取新的應(yīng)用包中所有圖標(biāo)及其對應(yīng)的啟動相關(guān)信息;遍歷Map關(guān)系列表,與提取到的圖標(biāo)信息對比;刪除在新包中不存在的圖標(biāo)Map元素,添加新包中新的圖標(biāo)及啟動相關(guān)信息Map元素;
      [0129]A55、根據(jù)新的Map關(guān)系列表重建系統(tǒng)窗口,結(jié)束監(jiān)聽。
      [0130]如圖5所示,步驟E所述麗S根據(jù)新的應(yīng)用窗口的配置信息為其分配位置和非全屏的大小是通過三分屏策略來完成的。首先屏幕固定在橫屏模式,即界面不可以隨著屏幕的旋轉(zhuǎn)而旋轉(zhuǎn),此處假設(shè)橫向屏寬為SW,除去導(dǎo)航欄和狀態(tài)欄的橫向屏高為SH,然后窗口在縱向是固定的,高度為SH,縱坐標(biāo)值也固定為狀態(tài)欄的高度,所以,只需要計(jì)算橫坐標(biāo)X和寬度W,寬度會根據(jù)窗口的橫豎屏屬性確定(豎屏為1/3屏寬,其他的為2/3屏寬),橫坐標(biāo)的計(jì)算就比較復(fù)雜,首先設(shè)置兩個(gè)計(jì)數(shù)器,假設(shè)為CH和CP,分別計(jì)數(shù)自系統(tǒng)啟動以來的系統(tǒng)打開過的橫屏和豎屏應(yīng)用窗口的數(shù)量,根據(jù)這個(gè)計(jì)數(shù)值,可以為新的窗口計(jì)算一個(gè)初始的橫坐標(biāo),然后由于用戶可以拖動窗口,即移動窗口位置,所以,還需要根據(jù)當(dāng)前焦點(diǎn)窗口的大小和位置,來確定新的應(yīng)用窗口的最終橫坐標(biāo),如圖5所示,具體包括如下步驟:
      [0131]E1、將屏幕固定為橫屏模式,將縱坐標(biāo)值固定為狀態(tài)欄的高度;
      [0132]E2、判斷應(yīng)用窗口為橫屏豎屏的屬性,根據(jù)窗口屬性計(jì)算應(yīng)用窗口寬度和初始橫坐標(biāo)值;
      [0133]E3、設(shè)置一套豎屏配置項(xiàng),當(dāng)系統(tǒng)啟動豎屏應(yīng)用模式時(shí),拷貝這套豎屏配置項(xiàng),以實(shí)現(xiàn)豎屏的應(yīng)用強(qiáng)制在橫屏上面正常顯示。
      [0134]步驟E2所述的計(jì)算方法包括:
      [0135]E21、計(jì)算應(yīng)用窗口寬度,若應(yīng)用窗口為豎屏,設(shè)置窗口寬度為三分之一橫向屏寬;若應(yīng)用窗口為橫屏,設(shè)置窗口寬度為三分之二橫向屏寬;
      [0136]E22、計(jì)算初始橫坐標(biāo)值,設(shè)置兩個(gè)計(jì)數(shù)器,分別計(jì)數(shù)自系統(tǒng)啟動以來的系統(tǒng)打開過的橫屏和豎屏應(yīng)用窗口的數(shù)量,根據(jù)計(jì)數(shù)結(jié)果為新的窗口計(jì)算一個(gè)初始的橫坐標(biāo);對于拖動窗口,根據(jù)當(dāng)前焦點(diǎn)窗口的大小和位置,來確定新的應(yīng)用窗口的最終橫坐標(biāo)值。
      [0137]步驟E22所述最終橫坐標(biāo)值的計(jì)算方法包括:
      [0138]E221、獲取當(dāng)前焦點(diǎn)窗口的寬度和橫坐標(biāo)的值;
      [0139]E222、計(jì)算當(dāng)前焦點(diǎn)窗口的寬度是否等于橫向屏寬,若是,則焦點(diǎn)窗口為全屏寬,設(shè)定應(yīng)用窗口的初始橫坐標(biāo)值為零;若否,則執(zhí)行步驟E223 ;
      [0140]E223、計(jì)算應(yīng)用窗口和當(dāng)前焦點(diǎn)窗口的寬度是否都等于三分之二橫向屏寬,若是,則說明應(yīng)用窗口和焦點(diǎn)窗口相交,無需處理,結(jié)束計(jì)算;若否,則計(jì)算新窗口和焦點(diǎn)窗口是否相交,若不相交,則無需處理,結(jié)束計(jì)算;若相交,則執(zhí)行步驟E224 ;
      [0141]E224、計(jì)算應(yīng)用窗口的寬度是否等于三分之二橫向屏寬,若是,如果應(yīng)用窗口的初始橫坐標(biāo)值為零,則最終橫坐標(biāo)值為三分之一橫向屏寬,如果應(yīng)用窗口的初始橫坐標(biāo)值為三分之一橫向屏寬,則最終橫坐標(biāo)值為零;若否,如果應(yīng)用窗口的初始橫坐標(biāo)值為三分之二橫向屏寬,則最終橫坐標(biāo)值為零,否則,最終橫坐標(biāo)值為初始橫坐標(biāo)值與三分之一橫向屏寬之和。
      [0142]E225、再次計(jì)算新窗口和焦點(diǎn)窗口是否相交,若是,如果應(yīng)用窗口的初始橫坐標(biāo)值為三分之二橫向屏寬,則最終橫坐標(biāo)值為零,否則最終橫坐標(biāo)值為初始橫坐標(biāo)值與三分之一橫向屏寬之和;若否,無需處理,結(jié)束計(jì)算。
      [0143]Android系統(tǒng)下豎屏應(yīng)用在啟動后,即使當(dāng)前設(shè)備處于橫向狀態(tài),屏幕也會被強(qiáng)制豎屏顯示。由于本發(fā)明將屏幕固定為橫屏顯示,所以為了能讓豎屏應(yīng)用正常顯示在橫屏上,除了窗口大小分配為豎向(寬為1/3屏寬,高為處狀態(tài)欄和導(dǎo)航欄以外的屏高)以外,必須改變系統(tǒng)的橫豎屏顯示機(jī)制。應(yīng)用窗口的界面顯示主要涉及兩方面,一個(gè)是資源文件,如圖片、字符串、界面布局、顏色等;另一個(gè)就是窗口的橫豎屏配置;資源文件本身是根據(jù)窗口的橫豎屏屬性、屏的像素密度等因素設(shè)計(jì)的,就是說橫屏顯示界面有橫屏資源,豎屏顯示界面有豎屏資源,再加上像素密度等因素,一般一個(gè)應(yīng)用會有多套資源文件,以讓其窗口適應(yīng)不同的設(shè)備屏幕配置?,F(xiàn)有系統(tǒng)的界面顯示過程是:首先系統(tǒng)啟動后,會根據(jù)當(dāng)前設(shè)備的橫豎屏狀態(tài)生成一套配置項(xiàng),假設(shè)為SysConfigs,其中包括橫豎屏屬性,然后應(yīng)用程序在做窗口界面設(shè)計(jì)時(shí)也有其自身的方向配置項(xiàng),假設(shè)為AppOr i,當(dāng)一個(gè)應(yīng)用窗口被打開時(shí),具體流程如圖6所不。
      [0144]由圖6的流程可知,如果想要一個(gè)豎屏的應(yīng)用正常顯示,只要該應(yīng)用拿到的系統(tǒng)配置是一套豎屏的配置項(xiàng)就好了,所以我們可以人為的制造一套豎屏的配置項(xiàng),當(dāng)豎屏應(yīng)用啟動時(shí),它拷貝的是這套人造的豎屏配置項(xiàng),而且不用改變當(dāng)前橫屏的SysConfig,這樣就可以實(shí)現(xiàn)豎屏的應(yīng)用強(qiáng)制在橫屏上面正常顯示了,具體的流程如圖7所示:
      [0145]E31、判斷應(yīng)用程序窗口界面自身的方向配置項(xiàng)是否為豎屏,若是,系統(tǒng)生成一套豎屏的配置項(xiàng);若否,系統(tǒng)生成一套橫屏的配置項(xiàng);
      [0146]E32、應(yīng)用程序拷貝新生成的系統(tǒng)配置項(xiàng);
      [0147]E33、應(yīng)用程序根據(jù)新生成的系統(tǒng)配置項(xiàng)來遍歷其資源文件,找到最匹配的那一套;
      [0148]E34、將最匹配的那一套資源文件用于界面顯示。
      [0149]由上圖7可以看到,這個(gè)流程未改變SysConfigs,也就可以保持屏幕的橫屏狀態(tài),同時(shí)讓豎屏的應(yīng)用使用了豎屏的資源來顯示。
      [0150]如圖8_11所不,本發(fā)明關(guān)閉、最小化和恢復(fù)應(yīng)用窗口以及從導(dǎo)航欄圖標(biāo)切換焦點(diǎn)應(yīng)用窗口的實(shí)現(xiàn)方案:
      [0151]首先在導(dǎo)航欄上顯示當(dāng)前所有打開應(yīng)用的圖標(biāo),不過由于移動設(shè)備系統(tǒng)內(nèi)存及(PU資源的限制,此處打開應(yīng)用的個(gè)數(shù)不可能無限,所以會根據(jù)具體系統(tǒng)做一個(gè)限制,假定為NMAX ;導(dǎo)航欄的實(shí)現(xiàn)是在System UI這個(gè)應(yīng)用中實(shí)現(xiàn)的,System UI是一個(gè)系統(tǒng)級應(yīng)用,從名字就可以知道它是負(fù)責(zé)實(shí)現(xiàn)系統(tǒng)Π顯示的,狀態(tài)欄和導(dǎo)航欄就是系統(tǒng)Π,其顯示和控制邏輯都是在這個(gè)應(yīng)用中實(shí)現(xiàn)的,因此,顯示打開應(yīng)用的圖標(biāo)這個(gè)工作就需要由System UI來完成了。
      [0152]Android系統(tǒng)中是以Task來代表一個(gè)運(yùn)行中的應(yīng)用的,每個(gè)Task有獨(dú)立的TaskID,還有狀態(tài),而Task又是以棧的形式來管理的,系統(tǒng)總共有兩個(gè)Task棧,一個(gè)是用來管理桌面應(yīng)用的Task棧,稱為Home棧,這是一個(gè)特殊的棧,其中也只有一個(gè)Task,即桌面應(yīng)用運(yùn)行的Task,稱作Home Task,另一個(gè)棧則用來管理非桌面應(yīng)用的,稱作App棧,非桌面應(yīng)用的Task也稱作App Task,系統(tǒng)剛啟動完成時(shí),只存在一個(gè)Home棧,而當(dāng)用戶啟動一個(gè)新的應(yīng)用時(shí)才會創(chuàng)建App棧,并將新的App Task加入到這個(gè)棧,每當(dāng)有新的應(yīng)用打開,就會把相應(yīng)的Task添加到棧的頂部,并將其設(shè)置為焦點(diǎn)窗口。
      [0153]這些在AMS中實(shí)現(xiàn)的一套管理應(yīng)用的基礎(chǔ)策略,以這套策略為基礎(chǔ),本發(fā)明實(shí)現(xiàn)了一套新的流程以實(shí)現(xiàn)多窗口界面的窗口關(guān)閉、最小化等操作需求。
      [0154]如圖8所示,打開應(yīng)用窗口具體包括以下步驟:
      [0155]G11、在導(dǎo)航欄上顯示當(dāng)前所有打開應(yīng)用的圖標(biāo),對打開應(yīng)用的個(gè)數(shù)進(jìn)行限制;
      [0156]G12、活動管理服務(wù)單元收到開啟應(yīng)用窗口的請求,判斷是否存在App棧(用來管理非桌面應(yīng)用的棧),若存在,則在App棧中尋找該應(yīng)用對應(yīng)的App Task (非桌面應(yīng)用的運(yùn)行中的應(yīng)用),如找到對應(yīng)的App Task,將找到的App Task移動到App棧的頂部,如果該App Task的狀態(tài)為Paused (停止)則將其設(shè)置為Started (開始),否則執(zhí)行步驟G3 ;若不存在,創(chuàng)建App棧,執(zhí)行步驟G13 ;
      [0157]G13、創(chuàng)建一個(gè)新的App Task,設(shè)置Task狀態(tài)為Started,將新的App Task加入到App棧的頂部;
      [0158]G14、將App棧設(shè)為焦點(diǎn)棧,將該App Task對應(yīng)窗口設(shè)為焦點(diǎn)窗口 ;
      [0159]G15、顯示新的應(yīng)用窗口 ;
      [0160]G16、發(fā)送Task To Front廣播并附帶該Task相關(guān)信息,結(jié)束任務(wù);
      [0161]如圖9所示,恢復(fù)應(yīng)用窗口具體包括以下步驟:
      [0162]G21、活動管理服務(wù)單元收到移動Task(運(yùn)行中的應(yīng)用)到前臺的請求,所述請求附帶Task ID(運(yùn)行中的應(yīng)用的識別號);
      [0163]G22、根據(jù)Task ID在App棧中尋找對應(yīng)的App Task,若找到,執(zhí)行步驟G23,若未找到,結(jié)束任務(wù);
      [0164]G23、將找到的App Task移動到App棧頂,如果所述App Task對應(yīng)的應(yīng)用窗口被隱藏則調(diào)用窗口顯示單元顯示它,如果所述App Task的狀態(tài)為Paused則將其設(shè)置為Started ;
      [0165]G24、將所述App Task對應(yīng)應(yīng)用窗口設(shè)為焦點(diǎn)窗口 ;
      [0166]G25、發(fā)送Task To Front廣播并附帶該Task相關(guān)信息,結(jié)束任務(wù);
      [0167]如圖10所示,最小化應(yīng)用窗口具體包括以下步驟:
      [0168]G31、活動管理服務(wù)單元收到移動Task到后臺的請求,所述請求附帶Task ID ;
      [0169]G32、根據(jù)Task ID在App棧中尋找對應(yīng)的App Task,若找到,執(zhí)行步驟G33,若未找到,結(jié)束任務(wù);
      [0170]G33、將找到的App Task移動到App棧底,如果該App Task的狀態(tài)為Started則將其設(shè)置為Paused并調(diào)用窗口顯示單元隱藏其窗口 ;
      [0171]G34、獲取App棧頂?shù)腁pp Task,判斷App Task狀態(tài)是否為Started,若是,將該AppTask對應(yīng)應(yīng)用窗口設(shè)為焦點(diǎn)窗口 ;若否,將Home棧(用來管理桌面應(yīng)用的Task棧)設(shè)為焦點(diǎn)棧,將Home Task(桌面應(yīng)用運(yùn)行的Task)對應(yīng)桌面窗口設(shè)為焦點(diǎn)窗口 ;
      [0172]G35、發(fā)送Task To Front廣播并附帶該Task相關(guān)信息,結(jié)束任務(wù);
      [0173]如圖11所示,關(guān)閉應(yīng)用窗口具體包括以下步驟:
      [0174]G41、活動管理服務(wù)單元收到刪除Task的請求,所述請求附帶Task ID ;
      [0175]G42、根據(jù)Task ID在App棧中尋找對應(yīng)的App Task,若找到,執(zhí)行步驟G43,若未找到,結(jié)束任務(wù);
      [0176]G43、如果找到的App Task的狀態(tài)為Started則調(diào)用WMS隱藏其窗口,將該AppTask移動從App棧刪除;
      [0177]G44、獲取App棧頂?shù)腁pp Task,判斷App Task狀態(tài)是否為Started,若是,將該App Task對應(yīng)應(yīng)用窗口設(shè)為焦點(diǎn)窗口 ;若否,將Home棧(用來管理桌面應(yīng)用的Task棧)設(shè)為焦點(diǎn)棧,將Home Task對應(yīng)桌面窗口設(shè)為焦點(diǎn)窗口 ;
      [0178]G45、發(fā)送Task To Front廣播并附帶該Task相關(guān)信息,結(jié)束任務(wù)。
      [0179]導(dǎo)航欄上面對于打開應(yīng)用圖標(biāo)的顯示,主要是通過監(jiān)聽Task To Front廣播來完成的,廣播附帶的Task相關(guān)信息主要包括Task ID,是否是Home Task,啟動該Task相關(guān)的信息,應(yīng)用包名等,在System UI中處理這些廣播,System UI中會用一個(gè)Task List保存所有Task相關(guān)信息,其處理流程如圖12所示。
      [0180]在導(dǎo)航欄上面顯示了多個(gè)應(yīng)用圖標(biāo)后,就可以根據(jù)用戶的手指觸摸操作來對應(yīng)用窗口做相應(yīng)處理了。導(dǎo)航欄上的圖標(biāo)是按照從左到右橫向排列的,且寬度和高度都是固定的,假設(shè)為IW和IH,每個(gè)圖標(biāo)顯示的位置可以通過系統(tǒng)調(diào)用來獲取到,那么假設(shè)獲取到的第一個(gè)圖標(biāo)的左邊位置為LI,根據(jù)觸摸點(diǎn)的橫坐標(biāo)即可算出該點(diǎn)落在了哪個(gè)圖標(biāo)上,計(jì)算方法是:
      [0181]假設(shè)觸摸點(diǎn)橫坐標(biāo)為X,落在了第i個(gè)圖標(biāo)上,則i = (X-Ll)/Iff+1
      [0182]根據(jù)手指觸摸按下與放開兩點(diǎn)的坐標(biāo)即可計(jì)算出用戶是向上滑動,還是橫向滑動,還是只是點(diǎn)擊某個(gè)圖標(biāo),方法如下:
      [0183]假設(shè)按下點(diǎn)的橫縱坐標(biāo)為:XD/YD,放開點(diǎn)的坐標(biāo)為XU/YU,則:
      [0184]如果sqrt( (XU-XD)* (XU-XD)+ (YU-YD)* (YU-YD))〈20,sqrt 是取平方根的意思,此處表明放開點(diǎn)和按下點(diǎn)相距非常近,可以認(rèn)為手指未滑動,則確定為點(diǎn)擊操作;
      [0185]如果(YU-YD) >IH&&abs (XU-XD)〈10,表明是向上滑動(abs是取絕對值的意思);
      [0186]如果(XU-XD) >IW&&abs (YU-YD)〈10,表明是向左右橫向滑動(abs是取絕對值的意思);
      [0187]根據(jù)以上的計(jì)算算法,即可識別出用戶觸摸操作,之后做出相應(yīng)的動作,具體流程如圖13所示。
      [0188]如圖14所示,本發(fā)明縮小、放大、拖動應(yīng)用窗口以及通過點(diǎn)擊非焦點(diǎn)應(yīng)用窗口內(nèi)部來切換應(yīng)用窗口的實(shí)現(xiàn)方案:
      [0189]窗口的縮放、拖動以及通過點(diǎn)擊非焦點(diǎn)應(yīng)用窗口內(nèi)部來切換應(yīng)用窗口,這些操作屬于在窗口顯示區(qū)域范圍內(nèi)(即狀態(tài)欄以下、導(dǎo)航欄以上的屏幕區(qū)域)的觸摸操作,所以使用一個(gè)全局的觸摸輸入事件監(jiān)聽器,這個(gè)監(jiān)聽器可以監(jiān)聽到屏幕上所有的觸摸輸入事件,按下、移動、放手,同時(shí)獲取到各個(gè)事件對應(yīng)的點(diǎn)的坐標(biāo)。實(shí)現(xiàn)的邏輯就是,首先排除所有觸摸在狀態(tài)欄、導(dǎo)航欄、輸入法窗口、以及所有應(yīng)用窗口的觸摸點(diǎn),因?yàn)檫@些都是非應(yīng)用窗口,然后記錄焦點(diǎn)窗口的上下左右的值,根據(jù)這些值可以判斷觸摸點(diǎn)是否落在了焦點(diǎn)窗口上,當(dāng)觸摸點(diǎn)落在了非應(yīng)用窗口則不做處理,而當(dāng)觸摸點(diǎn)落在了焦點(diǎn)窗口內(nèi)時(shí),還需要判斷其是否是在焦點(diǎn)窗口距離上邊N個(gè)pixel高度區(qū)域內(nèi),當(dāng)落在焦點(diǎn)窗口上邊N個(gè)pixel高度區(qū)域內(nèi)時(shí),即可進(jìn)行拖動或者放大縮小,否則當(dāng)落在非焦點(diǎn)窗口內(nèi)時(shí),則從上到下遍歷當(dāng)前所有的非焦點(diǎn)窗口,以找到該點(diǎn)落在哪個(gè)應(yīng)用窗口內(nèi),找到了而且該窗口不是桌面窗口,則調(diào)用AMS將對應(yīng)的task移動到前臺,這樣即切換了焦點(diǎn)窗口。
      [0190]圖14中,“根據(jù)手指的下一步操作來做出響應(yīng)”這一步驟,具體的細(xì)節(jié)是,若用戶手指按下后進(jìn)行滑動,則對窗口進(jìn)行拖動;若用戶單手指進(jìn)行雙擊(雙擊的定義是600ms內(nèi)連續(xù)點(diǎn)擊同一點(diǎn)兩次),則進(jìn)行窗口的縮放,總體流程圖如圖15所示。
      [0191]對于窗口手指操作的識別,首先說明一下Android系統(tǒng)中觸摸事件的上報(bào)流程,Android系統(tǒng)支持多點(diǎn)觸控,單獨(dú)一個(gè)手指對應(yīng)的上報(bào)事件主要有三種,按下Down、移動Move、放手Up,事件會附帶觸摸點(diǎn)的信息包括橫縱坐標(biāo)、ID,當(dāng)一個(gè)手指按下時(shí)就先上報(bào)一個(gè)Down事件,然后手指按住或者滑動過程中會以一定頻率一直上報(bào)Move事件,當(dāng)手指放手時(shí)則上報(bào)一個(gè)Up事件;當(dāng)多個(gè)手指按下時(shí),根據(jù)點(diǎn)被識別的時(shí)機(jī),先上報(bào)第一個(gè)手指觸摸點(diǎn)的Down事件,之后新的被識別到的手指觸摸點(diǎn)則上報(bào)Pointer Down事件,然后就會上報(bào)Move事件,Pointer Down事件和Move事件都會附帶有幾個(gè)點(diǎn)以及各個(gè)點(diǎn)的坐標(biāo)、ID,當(dāng)手指放手時(shí),若不是最好一個(gè)手指放手,則上報(bào)Pointer Up事件,若是最后一個(gè)手指,則上報(bào)Up事件,兩者不同點(diǎn)在于,Pointer Up除了附帶的放手的點(diǎn)的坐標(biāo)和ID以外還包括現(xiàn)在還剩下幾個(gè)點(diǎn)以及各個(gè)點(diǎn)的坐標(biāo)、ID,而Up事件只有一個(gè)放手的點(diǎn)的坐標(biāo)和ID。
      [0192]由于本發(fā)明只支持一個(gè)手指的操作,因此對于Pointer Down事件未做處理。另外對于識別“雙擊同一點(diǎn)”這個(gè)操作,此處的“同一點(diǎn)”是一個(gè)近似的,由于人手指觸摸是一個(gè)面的觸摸,所以即使看似同一點(diǎn)的觸摸點(diǎn)擊操作,系統(tǒng)識別到的Up和Down的點(diǎn)坐標(biāo)不可能精確的相等,因此當(dāng)兩個(gè)點(diǎn)間的距離小于一定值D時(shí)就認(rèn)為是同一點(diǎn),即:
      [0193]sqrt((Xl-X2)*(Xl-X2) + (Yl-Y2)*(Yl_Y2))〈D,sqrt 是取平方根的意思,
      [0194]如圖16所示,為識別單手指滑動操作流程圖,如圖17所示,為識別雙擊操作的流程圖,流程圖中提到同一點(diǎn)則代表兩點(diǎn)滿足上述的條件,然后雙擊即點(diǎn)擊兩次,這里就要一個(gè)點(diǎn)擊計(jì)數(shù),假設(shè)為C,C初始值為O ;識別到手指的操作方式之后,就需要計(jì)算窗口縮放或是拖動的最終位置了,本發(fā)明所實(shí)現(xiàn)的窗口縮放和拖動不是自由無限制的縮放和拖動,縱向不變,只做橫向變動,由于窗口在縱向是固定的,因此在計(jì)算時(shí)只以寬度和窗口左邊的坐標(biāo)值作為參考,那么假設(shè)窗口當(dāng)前寬度為W,左邊坐標(biāo)為X,屏寬為SW,其計(jì)算邏輯如下:
      [0195]首先窗口拖動,當(dāng)識別到用戶進(jìn)行單手指滑動時(shí),根據(jù)記錄的XD/YD,以及當(dāng)前Move事件的XM/YM,即可知道移動的橫縱坐標(biāo)距離,假設(shè)窗口初始位置的左上角點(diǎn)坐標(biāo)為XS/YS,移動后的坐標(biāo)為XE/YE,那么XE = XS+(XM-XD),YE = YS+(YM-YD),在用戶手指放手前,XM和YM是不斷變化的,這樣窗口的位置也跟隨手指不斷移動,也就是說在移動過程中,窗口實(shí)際是被自由拖動的,但當(dāng)手指放手時(shí),則會根據(jù)XU/YU計(jì)算XE/YE,即XE =XS+(XU-XD),YE = YS+(YU-YD,不過此時(shí)的XE/YE只是暫時(shí)的,因?yàn)樗鼈儾粫倓偤寐湓谌制恋母鱾€(gè)小分塊的右上角,需要根據(jù)XE做一個(gè)重新確定最終的位置,計(jì)算邏輯如下:
      [0196]定一個(gè)最小有效移動距離為1/6SW,即當(dāng)XE-XS>1/6SW時(shí)認(rèn)為這是一次有效的移動,才進(jìn)行下一步移動位置的計(jì)算,否則窗口位置不變化。下面的計(jì)算是在移動距離有效的基礎(chǔ)上進(jìn)行的:
      [0197]當(dāng)W=1/3SW 時(shí),
      [0198]如果XE〈XS,表明向左移,左移的目標(biāo)分塊只能是第1、2兩塊,如果XE〈1/6SW,則認(rèn)為目標(biāo)分塊是第I塊,則設(shè)置XE = O ;否則目標(biāo)分塊是第2塊,則設(shè)置XE = 1/3SW ;
      [0199]如果XE>XS,表明向右移,左移的目標(biāo)分塊只能是第2、3兩塊,如果XE>1/2SW,則認(rèn)為目標(biāo)分塊是第3塊,則設(shè)置XE = 2/3SW ;否則目標(biāo)分塊是第2塊,則設(shè)置XE = 1/3SW ;
      [0200]其他情況下,設(shè)置XE = XS,即窗口位置不變。
      [0201 ] 當(dāng)W = 2/3SW時(shí),2/3屏寬的窗口只能左右移動一次,且其X坐標(biāo)只能是O或者1/3SW:
      [0202]如果XE〈XS并且XS = 1/3SW,表示右邊的2/3SW窗口向左移動,則設(shè)置XE = O ;
      [0203]如果XE>XS并且XS = 0,表示左邊2/3SW的窗口向右移動,則設(shè)置XE = 1/3SW ;
      [0204]其他情況下,設(shè)置XE = XS,即窗口位置不變。
      [0205]當(dāng)W = SW時(shí),設(shè)置XE = XS,即窗口位置不變。
      [0206]其次是窗口的縮放,當(dāng)識別到用戶進(jìn)行雙擊操作時(shí),窗口縮放的計(jì)算邏輯如下:
      [0207]當(dāng)W= 1/3SW時(shí),設(shè)置W = W+1/3SW,若X+2/3SW>SW,表明擴(kuò)大后窗口超出了顯示屏,需要重新設(shè)置X = X - 1/3屏寬;否則X不變;
      [0208]當(dāng)W = 2/3SW時(shí),設(shè)置W = W+1/3SW,若X不為0,設(shè)置X為O ;否則X不變;
      [0209]當(dāng)W= SW 時(shí),設(shè)置 W= 1/3SW,X 不變。
      [0210]在進(jìn)行了上述的窗口寬度及位置變化之后,即可調(diào)用WMS進(jìn)行實(shí)際界面上的窗口重繪了,這一步只是調(diào)用WMS的相應(yīng)系統(tǒng)接口即可完成。
      [0211]雖然結(jié)合附圖描述了本發(fā)明的實(shí)施方式,但是本領(lǐng)域的技術(shù)人員可以在所附權(quán)利要求的范圍之內(nèi)作出各種變形或修改,只要不超過本發(fā)明的權(quán)利要求所描述的保護(hù)范圍,都應(yīng)當(dāng)在本發(fā)明的保護(hù)范圍之內(nèi)。
      【權(quán)利要求】
      1.一種基于Android操作系統(tǒng)的多窗口界面實(shí)現(xiàn)方法,其特征在于:所述系統(tǒng)包括包管理服務(wù)單元、活動管理服務(wù)單元、窗口管理服務(wù)單元,所述實(shí)現(xiàn)方法具體包括以下步驟: A、用戶端啟動新的應(yīng)用窗口,對應(yīng)的信息發(fā)送給活動管理服務(wù)單元; B、活動管理服務(wù)單元根據(jù)發(fā)送過來的信息解析出目標(biāo)應(yīng)用信息,校驗(yàn)啟動權(quán)限,如校驗(yàn)成功,執(zhí)行步驟C,如校驗(yàn)失敗,啟動失??; C、活動管理服務(wù)單元將目標(biāo)應(yīng)用信息告知窗口管理服務(wù)單元準(zhǔn)備進(jìn)行應(yīng)用窗口的切換; D、活動管理服務(wù)單元啟動新的應(yīng)用; E、窗口管理服務(wù)單元根據(jù)新的應(yīng)用窗口的配置信息為其分配位置和非全屏的大小; F、新的應(yīng)用在分配的窗口中繪畫自己的窗口界面,繪畫完成后窗口管理服務(wù)單元將新的應(yīng)用窗口顯示出來,啟動完成; G、在活動管理服務(wù)單元中設(shè)置一套管理應(yīng)用的基礎(chǔ)策略,實(shí)現(xiàn)應(yīng)用窗口的應(yīng)用操作需求。
      2.如權(quán)利要求1所述的一種基于Android操作系統(tǒng)的多窗口界面實(shí)現(xiàn)方法,其特征在于,步驟A中啟動新的應(yīng)用窗口包括如下步驟: Al、啟動系統(tǒng),調(diào)用包管理服務(wù)單元,獲取當(dāng)前所有安裝的應(yīng)用包信息列表; A2、提取所有應(yīng)用包信息中的所有應(yīng)用圖標(biāo)及其對應(yīng)的啟動相關(guān)信息; A3、創(chuàng)建一個(gè)從圖標(biāo)到啟動相關(guān)信息的Map關(guān)系列表; A4、創(chuàng)建一個(gè)系統(tǒng)窗口并將所有應(yīng)用圖標(biāo)添加到窗口中; A5、對系統(tǒng)中應(yīng)用的變化情況監(jiān)聽系統(tǒng)廣播; A6、添加一個(gè)所有應(yīng)用按鈕到導(dǎo)航欄最左邊; A7、若用戶點(diǎn)擊所有應(yīng)用按鈕,顯示裝有所有應(yīng)用圖標(biāo)的系統(tǒng)窗口 ;若用戶點(diǎn)擊某個(gè)圖標(biāo),通過圖標(biāo)到啟動相關(guān)信息的Map關(guān)系列表找到該圖標(biāo)對應(yīng)的啟動相關(guān)信息; AS、調(diào)用活動管理服務(wù)單元,啟動應(yīng)用。
      3.如權(quán)利要求2所述的一種基于Android操作系統(tǒng)的多窗口界面實(shí)現(xiàn)方法,其特征在于,步驟A5所述監(jiān)聽系統(tǒng)廣播包括以下步驟:A51、收到系統(tǒng)應(yīng)用包相關(guān)廣播,判斷廣播類型;若廣播類型為應(yīng)用安裝,則執(zhí)行步驟A52 ;若廣播類型為應(yīng)用卸載,則執(zhí)行步驟A53,若廣播類型為應(yīng)用升級,則執(zhí)行步驟A54 ;A52、根據(jù)廣播中的包信息調(diào)用包管理服務(wù)單元,提取新安裝的應(yīng)用包中所有圖標(biāo)及其對應(yīng)的啟動信息,若圖標(biāo)數(shù)量大于零,則將這些圖標(biāo)及其對應(yīng)的啟動信息加入到Map關(guān)系列表中;若圖標(biāo)數(shù)量小于零,則結(jié)束監(jiān)聽; A53、根據(jù)廣播中的包信息刪除Map列表關(guān)系列表中的所有與該包相關(guān)的Map兀素;A54、根據(jù)廣播中的新包信息調(diào)用PMS提取新的應(yīng)用包中所有圖標(biāo)及其對應(yīng)的啟動相關(guān)信息;遍歷Map關(guān)系列表,與提取到的圖標(biāo)信息對比;刪除在新包中不存在的圖標(biāo)Map元素,添加新包中新的圖標(biāo)及啟動相關(guān)信息Map元素; A55、根據(jù)新的Map關(guān)系列表重建系統(tǒng)窗口,結(jié)束監(jiān)聽。
      4.如權(quán)利要求1所述的一種基于Android操作系統(tǒng)的多窗口界面實(shí)現(xiàn)方法,其特征在于:步驟E中窗口管理服務(wù)單元根據(jù)新的應(yīng)用窗口的配置信息為其分配位置和大小包括如下步驟: El、將屏幕固定為橫屏模式,將縱坐標(biāo)值固定為狀態(tài)欄的高度; E2、判斷應(yīng)用窗口為橫屏豎屏的屬性,根據(jù)窗口屬性計(jì)算應(yīng)用窗口寬度和初始橫坐標(biāo)值; E3、設(shè)置一套豎屏配置項(xiàng),當(dāng)系統(tǒng)啟動豎屏應(yīng)用模式時(shí),拷貝這套人豎屏配置項(xiàng),以實(shí)現(xiàn)豎屏的應(yīng)用強(qiáng)制在橫屏上面正常顯示。
      5.根據(jù)權(quán)利要求4所述的一種基于Android操作系統(tǒng)的多窗口界面實(shí)現(xiàn)方法,其特征在于:步驟E2所述的計(jì)算方法包括: E21、計(jì)算應(yīng)用窗口寬度,若應(yīng)用窗口為豎屏,設(shè)置窗口寬度為三分之一橫向屏寬;若應(yīng)用窗口為橫屏,設(shè)置窗口寬度為三分之二橫向屏寬; E22、計(jì)算初始橫坐標(biāo)值,設(shè)置兩個(gè)計(jì)數(shù)器,分別計(jì)數(shù)自系統(tǒng)啟動以來系統(tǒng)打開過的橫屏和豎屏應(yīng)用窗口的數(shù)量,根據(jù)計(jì)數(shù)結(jié)果為新的窗口計(jì)算一個(gè)初始的橫坐標(biāo);對于拖動窗口,根據(jù)當(dāng)前焦點(diǎn)窗口的大小和位置,來確定新的應(yīng)用窗口的最終橫坐標(biāo)值。
      6.根據(jù)權(quán)利要求5所述的一種基于Android操作系統(tǒng)的多窗口界面實(shí)現(xiàn)方法,其特征在于: 步驟E22所述初始橫坐標(biāo)值的計(jì)算方法包括: 計(jì)數(shù)器計(jì)數(shù)自系統(tǒng)啟動以來系統(tǒng)打開過的橫屏和豎屏應(yīng)用窗口的數(shù)量分別為CH和CP,橫向屏寬為SW,窗口的初始橫坐標(biāo)為X,若應(yīng)用窗口為豎屏,則:X= (CP Mod3)*1/3SW ;若應(yīng)用窗口若為橫屏,則:當(dāng)(CH Mod 2) = O時(shí),X = O ;當(dāng)(CH Mod 2) = I時(shí),X = 1/3SW ; 步驟E22所述最終橫坐標(biāo)值的計(jì)算方法包括: E221、獲取當(dāng)前焦點(diǎn)窗口的寬度和橫坐標(biāo)的值; E222、計(jì)算當(dāng)前焦點(diǎn)窗口的寬度是否等于橫向屏寬,若是,則焦點(diǎn)窗口為全屏寬,設(shè)定應(yīng)用窗口的初始橫坐標(biāo)值為零;若否,則執(zhí)行步驟E223 ; E223、計(jì)算應(yīng)用窗口和當(dāng)前焦點(diǎn)窗口的寬度是否都等于三分之二橫向屏寬,若是,則說明應(yīng)用窗口和焦點(diǎn)窗口相交,無需處理,結(jié)束計(jì)算;若否,則計(jì)算新窗口和焦點(diǎn)窗口是否相交,若不相交,則無需處理,結(jié)束計(jì)算;若相交,則執(zhí)行步驟E224 ; E224、計(jì)算應(yīng)用窗口的寬度是否等于三分之二橫向屏寬,若是,如果應(yīng)用窗口的初始橫坐標(biāo)值為零,則最終橫坐標(biāo)值為三分之一橫向屏寬,如果應(yīng)用窗口的初始橫坐標(biāo)值為三分之一橫向屏寬,則最終橫坐標(biāo)值為零;若否,如果應(yīng)用窗口的初始橫坐標(biāo)值為三分之二橫向屏寬,則最終橫坐標(biāo)值為零,否則,最終橫坐標(biāo)值為初始橫坐標(biāo)值與三分之一橫向屏寬之和; E225、再次計(jì)算新窗口和焦點(diǎn)窗口是否相交,若是,如果應(yīng)用窗口的初始橫坐標(biāo)值為三分之二橫向屏寬,則最終橫坐標(biāo)值為零,否則最終橫坐標(biāo)值為初始橫坐標(biāo)值與三分之一橫向屏寬之和;若否,無需處理,結(jié)束計(jì)算。
      7.根據(jù)權(quán)利要求4所述的一種基于Android操作系統(tǒng)的多窗口界面實(shí)現(xiàn)方法,其特征在于:步驟E3具體包括以下步驟: E31、判斷應(yīng)用程序窗口界面自身的方向配置項(xiàng)是否為豎屏,若是,系統(tǒng)生成一套豎屏的配置項(xiàng);若否,系統(tǒng)生成一套橫屏的配置項(xiàng); E32、應(yīng)用程序拷貝新生成的系統(tǒng)配置項(xiàng); E33、應(yīng)用程序根據(jù)新生成的系統(tǒng)配置項(xiàng)來遍歷其資源文件,找到最匹配的那一套; E34、將最匹配的那一套資源文件用于界面顯示。
      8.根據(jù)權(quán)利要求1所述的一種基于Android操作系統(tǒng)的多窗口界面實(shí)現(xiàn)方法,其特征在于:步驟G所述應(yīng)用操作包括打開、關(guān)閉、最小化和恢復(fù)應(yīng)用窗口以及從導(dǎo)航欄圖標(biāo)切換焦點(diǎn)應(yīng)用窗口,以及縮小、放大、拖動應(yīng)用窗口和通過點(diǎn)擊非焦點(diǎn)應(yīng)用窗口內(nèi)部來切換應(yīng)用窗P。
      9.根據(jù)權(quán)利要求8所述的一種基于Android操作系統(tǒng)的多窗口界面實(shí)現(xiàn)方法,其特征在于,所述打開應(yīng)用窗口具體包括以下步驟: G11、在導(dǎo)航欄上顯示當(dāng)前所有打開應(yīng)用的圖標(biāo),對打開應(yīng)用的個(gè)數(shù)進(jìn)行限制; G12、活動管理服務(wù)單元收到開啟應(yīng)用窗口的請求,判斷是否存在App棧,若存在,則在App棧中尋找該應(yīng)用對應(yīng)的App Task,如找到對應(yīng)的App Task,將找到的App Task移動到App棧的頂部,如果該App Task的狀態(tài)為Paused則將其設(shè)置為Started,否則執(zhí)行步驟G3 ;若不存在,創(chuàng)建App棧,執(zhí)行步驟G13 ; G13、創(chuàng)建一個(gè)新的App Task,設(shè)置Task狀態(tài)為Started,將新的App Task加入到App棧的頂部; G14、將App棧設(shè)為焦點(diǎn)棧,將該App Task對應(yīng)窗口設(shè)為焦點(diǎn)窗口 ; G15、顯示新的應(yīng)用窗口 ; G16、發(fā)送Task To Front廣播并附帶該Task相關(guān)信息,結(jié)束任務(wù); 步驟G所述恢復(fù)應(yīng)用窗口具體包括以下步驟: G21、活動管理服務(wù)單元收到移動Task到前臺的請求,所述請求附帶Task ID ; G22、根據(jù)Task ID在App棧中尋找對應(yīng)的App Task,若找到,執(zhí)行步驟G23,若未找到,結(jié)束任務(wù); G23、將找到的App Task移動到App棧頂,如果所述App Task對應(yīng)的應(yīng)用窗口被隱藏則調(diào)用窗口顯示單元顯示它,如果所述App Task的狀態(tài)為Paused則將其設(shè)置為Started ;G24、將所述App Task對應(yīng)應(yīng)用窗口設(shè)為焦點(diǎn)窗口 ; G25、發(fā)送Task To Front廣播并附帶該Task相關(guān)信息,結(jié)束任務(wù); 步驟G所述最小化應(yīng)用窗口具體包括以下步驟: G31、活動管理服務(wù)單元收到移動Task到后臺的請求,所述請求附帶Task ID ; G32、根據(jù)Task ID在App棧中尋找對應(yīng)的App Task,若找到,執(zhí)行步驟G33,若未找到,結(jié)束任務(wù); G33、將找到的App Task移動到App棧底,如果該App Task的狀態(tài)為Started則將其設(shè)直為Paused并調(diào)用窗口顯不單兀隱減其窗口 ; G34、獲取App棧頂?shù)腁pp Task,判斷App Task狀態(tài)是否為Started,若是,將該AppTask對應(yīng)應(yīng)用窗口設(shè)為焦點(diǎn)窗口 ;若否,將Home棧設(shè)為焦點(diǎn)棧,將Home Task對應(yīng)桌面窗口設(shè)為焦點(diǎn)窗口; G35、發(fā)送Task To Front廣播并附帶該Task相關(guān)信息,結(jié)束任務(wù); 步驟G所述關(guān)閉應(yīng)用窗口具體包括以下步驟: G41、活動管理服務(wù)單元收到刪除Task的請求,所述請求附帶Task ID ; G42、根據(jù)Task ID在App棧中尋找對應(yīng)的App Task,若找到,執(zhí)行步驟G43,若未找到,結(jié)束任務(wù); G43、如果找到的App Task的狀態(tài)為Started則調(diào)用WMS隱藏其窗口,將該App Task移動從App棧刪除; G44、獲取App棧頂?shù)腁pp Task,判斷App Task狀態(tài)是否為Started,若是,將該AppTask對應(yīng)應(yīng)用窗口設(shè)為焦點(diǎn)窗口 ;若否,將Home棧設(shè)為焦點(diǎn)棧,將Home Task對應(yīng)桌面窗口設(shè)為焦點(diǎn)窗口; G45、發(fā)送Task To Front廣播并附帶該Task相關(guān)信息,結(jié)束任務(wù)。
      10.根據(jù)權(quán)利要求8所述的一種基于Android操作系統(tǒng)的多窗口界面實(shí)現(xiàn)方法,其特征在于: 所述縮小、放大、拖動應(yīng)用窗口和通過點(diǎn)擊非焦點(diǎn)應(yīng)用窗口內(nèi)部來切換應(yīng)用窗口具體包括以下步驟: G51、設(shè)置一個(gè)全局的觸摸輸入事件監(jiān)聽器,用于監(jiān)聽屏幕上所有的觸摸輸入事件,如按下、移動、放手,同時(shí)獲取到各個(gè)事件對應(yīng)的點(diǎn)的坐標(biāo); G52、記錄焦點(diǎn)窗口的上下左右的值,根據(jù)這些值判斷觸摸點(diǎn)是否落在了焦點(diǎn)窗口上,當(dāng)觸摸點(diǎn)落在了非應(yīng)用窗口則不作處理,而當(dāng)觸摸點(diǎn)落在了焦點(diǎn)窗口內(nèi)時(shí),判斷其是否是在焦點(diǎn)窗口距離上邊N個(gè)pixel高度區(qū)域內(nèi),當(dāng)落在焦點(diǎn)窗口上邊N個(gè)pixel高度區(qū)域內(nèi)時(shí),即可進(jìn)行拖動或者放大縮小,否則當(dāng)落在非焦點(diǎn)窗口內(nèi)時(shí),則從上到下遍歷當(dāng)前所有的非焦點(diǎn)窗口,以找到該點(diǎn)落在哪個(gè)應(yīng)用窗口內(nèi),找到了而且該窗口不是桌面窗口,則調(diào)用AMS將對應(yīng)的task移動到前臺,這樣即切換了焦點(diǎn)窗口。
      【文檔編號】G06F3/0481GK104461242SQ201410742479
      【公開日】2015年3月25日 申請日期:2014年12月8日 優(yōu)先權(quán)日:2014年12月8日
      【發(fā)明者】祁成紅 申請人:深圳市嘉樂派科技有限公司
      網(wǎng)友詢問留言 已有0條留言
      • 還沒有人留言評論。精彩留言會獲得點(diǎn)贊!
      1