專利名稱:Wine與安卓手機軟鍵盤輸入的整合方法
技術(shù)領(lǐng)域:
本發(fā)明涉及移動通信領(lǐng)域,尤其涉及Wine與安卓手機軟鍵盤輸入的整合方法。
背景技術(shù):
以手機為代表的智能化移動終端設(shè)備既是計算機技術(shù)的一個重要發(fā)展方向,又是一個競爭十分激烈的市場。自從谷歌公司和開放手機聯(lián)盟推出Android操作系統(tǒng)和基于 Androuid的手機以來,很快就在世界手機市場上占有了不小的份額,各種Android手機層出不窮,由中國移動開發(fā)并推出的OPhone也是一種Android手機。所謂Android操作系統(tǒng),實際上是對Linux操作系統(tǒng)的一種改編和擴充,它的內(nèi)核基本上就是Linux的內(nèi)核,但是在用戶空間卻專門針對手機和移動終端設(shè)備的特點作了大幅的改進和增強,這些改動大都與編程模式和圖形界面,即圖形化用戶界面(GUI)有關(guān)。另一種常用于手機的操作系統(tǒng)是微軟的WinCE和WM (Windows Mobile),這是在微軟的Windows操作系統(tǒng)上發(fā)展起來的?;赪inCE/WM的手機也在市場上占不小的份額,并且開發(fā)出了數(shù)量不小的WinCE/WM應(yīng)用軟件。如果能把這些應(yīng)用軟件拿到Android手機上運行,對于提高Android手機的市場占有率顯然是有利的。Wine是一款優(yōu)秀的Linux系統(tǒng)平臺下的模擬器軟件,用來將Windows系統(tǒng)下的軟件在Linux系統(tǒng)下穩(wěn)定運行,該軟件更新頻繁,日臻完善,可以運行許多大型Windows系統(tǒng)下的軟件。當(dāng)把Wine移植到ARM架構(gòu)的Linux平臺上以后,WinCE/WM應(yīng)用軟件已經(jīng)可以在 Wine的支持下在采用ARM處理器的Linux平臺上運行,同樣也可以在Android平臺運行。在帶圖形界面的Linux操作系統(tǒng)中,有關(guān)圖形界面的功能都是由X視窗系統(tǒng)提供的,輸入法也是圖形界面功能的一部分。運行著應(yīng)用軟件的進程都不直接讀取鍵盤輸入,而只是通過進程間通信從X服務(wù)進程獲取輸入。人機交互的輸入先由本系統(tǒng)中唯一的X服務(wù)進程讀取,由X服務(wù)進程統(tǒng)一加以前期的處理,然后根據(jù)屏幕上光標(biāo)的當(dāng)前位置以及當(dāng)前處于“聚焦”狀態(tài)的視窗配送給合適的進程/線程。X視窗屬于另一個開源軟件項目,早在Unix時代即已存在。由于Linux系統(tǒng)大多離不開圖形界面,X視窗實際上已經(jīng)成了 Linux操作系統(tǒng)的一部分。為適應(yīng)手機和其它嵌入式系統(tǒng)的需要,人們還將X視窗加以裁剪、縮編、簡化,成為一個小型化的版本稱為TinyX, 所以TinyX是專門與嵌入式Linux配對使用的X視窗系統(tǒng)。然而,與常規(guī)的Linux平臺不同,Android/OMS平臺不使用TinyX,也不支持依靠X 視窗服務(wù)進程(Xserver)提供⑶I的Linux應(yīng)用。在Android/OMS平臺上,所有來自鍵盤和鼠標(biāo)器的輸入全部為一個“窗口管理器”線程所截獲,再由這個線程分發(fā)給當(dāng)前正在運行的“應(yīng)用(Activity)”。這樣就引出了如何整合Wine和Android/OMS的鍵盤輸入問題。因為TinyX和Android將會爭搶來自鍵盤和鼠標(biāo)器的輸入,也會各自為政地往屏幕上畫圖。為解決Wine與Android/OMS軟鍵盤輸入整合的問題,原有的中國移動的程序模型是在運行WinCE/WM應(yīng)用時,在Android也啟動一個Java進程作為Wine的代理, 稱為win印roxy,并使得來自鍵盤/鼠標(biāo)器的輸入統(tǒng)一由Android加以截獲,將其交給win印roxy,而后者將來自鍵盤/鼠標(biāo)器的輸入轉(zhuǎn)發(fā)給Xserver。通過這樣一種消息傳遞方式,保證消息的單向流通,避免發(fā)生消息多重傳遞而引發(fā)的混亂與沖突。然而這個方案以及后來提出的驗證原型,在實際上還有很多問題需要解決,其中最重要的是在什么時候要(在屏幕上)彈出軟鍵盤、什么時候又不應(yīng)該彈出軟鍵盤的問題。
發(fā)明內(nèi)容
針對現(xiàn)有技術(shù)中存在的上述問題,本發(fā)明提供了 Wine與安卓手機軟鍵盤輸入的整合方法。本發(fā)明提供了 Wine與安卓手機軟鍵盤輸入的整合方法,包括步驟1,當(dāng)發(fā)生軟鍵盤事件時,Wine代理向X視窗服務(wù)進程發(fā)出事件通知;步驟2,X視窗服務(wù)進程按照預(yù)定的格式對事件通知進行轉(zhuǎn)換后,將轉(zhuǎn)換后的事件通知發(fā)送至Winexll. drv中的鍵盤/鼠標(biāo)器輸入處理程序;步驟3,Winexll. drv將軟鍵盤事件上交到公共控件管理模塊,公共控件管理模塊決定彈出軟鍵盤;步驟4,X視窗服務(wù)進程將來自Wine的彈出軟鍵盤請求轉(zhuǎn)發(fā)給Wine代理,Wine代理執(zhí)行彈出軟件盤操作。在一個示例中,安卓手機為Ophone手機。在一個示例中,步驟1中,當(dāng)發(fā)生軟鍵盤事件時,調(diào)用函數(shù)Wine代理的函數(shù) onTouchEvent()。在一個示例中,步驟1中,Wine代理通過套接字將軟件盤事件發(fā)送至X視窗服務(wù)進程。在一個示例中,步驟2中,X視窗服務(wù)進程將轉(zhuǎn)換后的事件通知發(fā)送至應(yīng)用進程。在一個示例中,步驟3中,應(yīng)用進程中的Winexll. drv. dll將事件通知上交至公共控件管理模塊的comet 132. dll。在一個示例中,步驟3中,c0mctl32. dll判斷光標(biāo)落在可編輯的控件中,決定彈出軟鍵盤。在一個示例中,步驟3中,Winexll. drv. dll將彈出軟鍵盤的請求發(fā)送至X視窗服
務(wù)進程。在一個示例中,步驟4中,X視窗服務(wù)進程進行格式轉(zhuǎn)換之后將彈出軟鍵盤的請求轉(zhuǎn)發(fā)給Wine代理。在一個示例中,還包括步驟5,用戶按下軟鍵盤的某個鍵后,調(diào)用WineProxy的函數(shù)onTextChange ();步驟6,從TextView的緩沖區(qū)中獲取鍵入的字符,并將其發(fā)送給X視窗服務(wù)進程;步驟7,X視窗服務(wù)進程將字符轉(zhuǎn)發(fā)給應(yīng)用進程中的Winexll. drv. dll ;步驟8,Winexll. drv. dll向應(yīng)用進程發(fā)送一個WM_CHAR消息;步驟9,應(yīng)用進程接收到WM_CHAR消息;用戶點擊回車鍵或點擊不可編輯的區(qū)間, 關(guān)閉軟鍵盤。本發(fā)明使得人機交互輸入統(tǒng)一流經(jīng)Wine服務(wù)進程(Wineserver)以及feerver,再由代理進程加以接收后執(zhí)行彈出軟鍵盤工作,整個過程中只有一套輸入信息的處理和配送機制,解決了 Wine和Android/OMS關(guān)于軟鍵盤輸入的整合問題,同時解決了彈出、關(guān)閉軟鍵盤的時機與途徑問題。
下面結(jié)合附圖來對本發(fā)明作進一步詳細說明,其中圖1是將Wine移植到ARM架構(gòu)的Linux平臺并運行WinCE/WM應(yīng)用程序時的系統(tǒng)的基本架構(gòu)示意圖;圖2是應(yīng)用軟鍵盤整合方案后的鍵盤輸入操作的流程示意圖。
具體實施例方式本發(fā)明在原有的中國移動提出的簡單程序原型的基礎(chǔ)上,加以完善和改進,實現(xiàn)了一種完整的整合方案。該方案首先切斷feerver獲取軟鍵盤的輸入的途徑,而在運行WinCE/WM應(yīng)用時, Android啟動一個進程作為Wine的代理win印roxy,這與中國移動的方案類似,然而這個代理必須要與feerver通信,為此,首先建立其與feerver之間建立起Socket連接,并定義一組簡單地通信協(xié)議。同時完善Wine與Xserver之間的協(xié)議,并且提供一個API使得Wine 可以向Xserver請求彈出軟鍵盤。此時,只要一發(fā)生鍵盤輸入,Wine就向Xserver發(fā)出事件通知,使后者將其當(dāng)做內(nèi)核的鍵盤/鼠標(biāo)輸入,并上交到公共空間管理層決定是否彈出軟鍵盤。之后Xserver將Wine的彈出軟鍵盤請求遞交給其代理win印roxy,后者即可執(zhí)行彈出軟鍵盤操作。而當(dāng)軟鍵盤彈出后,對軟鍵盤的按鍵操作也將通過相反的消息傳遞通路返回,最終到達WinCE/WM應(yīng)用,被其所捕獲。這個方法的要點為1)、在feerver的代碼中切斷從內(nèi)核獲取鍵盤/鼠標(biāo)器輸入的途徑。2)、在Xserver和Win印roxy之間建立起一對Socket,并定義一套簡單的通信協(xié)議。3)、對)(server與Wine之間的通信協(xié)議加以擴充,并在Winexll. drv. dll中增添一個API函數(shù),使Wine可以向Xserver請求彈出軟件盤。4)、一發(fā)生鍵盤/鼠標(biāo)器事件,Wineserver就向Xserver發(fā)出事件通知。5)、得到來自Wineserver的事件通知后,Xserver將其當(dāng)作來自內(nèi)核的鍵盤/鼠標(biāo)器輸入,轉(zhuǎn)化成feerver格式的消息后發(fā)送給Winexll. drv中的鍵盤/鼠標(biāo)器輸入處理程序。鍵盤/鼠標(biāo)器輸入處理程序是在Winex 11. drv中的一段根據(jù)不同輸入消息類型進行分支的代碼。即如果發(fā)現(xiàn)送來的消息是Xserver格式的消息,則處理程序直接將其交給上層。這個輸入處理程序就是這樣If是Xserver格式的消息,消息內(nèi)容是touchEvent Then直接將消息交于comctl32. dll即公共空間管理Else 其他事件,按照原有的處理代碼來處理。6) ,Winexll. drv將輸入上交到公共控件管理這一層,由公共控件管理機制決定是否需要彈出軟鍵盤。7)、XserVer將來自Wine的彈出軟鍵盤請求轉(zhuǎn)發(fā)給Win印roxy,由后者執(zhí)行彈出軟件盤的操作。圖1是按本發(fā)明中的背景的軟件系統(tǒng)架構(gòu)。圖中的水平虛線表示用戶空間與系統(tǒng)空間的分界,虛線以上為用戶空間,以下為系統(tǒng)空間。圖中的每個圓圈都代表著一個進程, 其中最大的那個圓圈代表運行著WinCE/WM應(yīng)用的那個進程;這個圓圈分成上下兩部分,表示這個進程是由WinCE/WM應(yīng)用的EXE映像和所有被(直接或間接地)動態(tài)連接到這個映像的DLL兩個部分共同構(gòu)成的。除運行著WinCE/WM應(yīng)用的進程之外,系統(tǒng)中至少還有兩個進程,一個是Wineserver,就是Wine服務(wù)器進程,另一個是Xserver,就是TinyX的服務(wù)器進程。WinCE/WM應(yīng)用進程之所以能在Linux內(nèi)核上運行,是因為有Wineserver和DLL的支持。而WinCE/WM應(yīng)用進程之所以能獲取鍵盤輸入和鼠標(biāo)器輸入,之所以能在屏幕上顯示圖形,是因為有Xserver的存在。在常規(guī)的Linux系統(tǒng)中,來自鍵盤和鼠標(biāo)器的輸入全部為 Xserver所截獲,再由Xserver分發(fā)給當(dāng)前受到聚焦的進程。圖2是按本發(fā)明所述方法的完整結(jié)構(gòu)示意圖,從圖中可以看到各個模塊之間僅僅通過一條鏈?zhǔn)酵废噙B,避免消息傳遞的混亂與沖突。期中Wine與Xserver (TinyX)之間、 Tinx與Wineproxy之間通過定義的socket通信協(xié)議來相互通信。根據(jù)整合方案,需要對代碼進行以下修改1)、定義WineProxy的代理接口包含通信功能以及控制軟鍵盤彈出關(guān)閉等功能的抽象函數(shù)。2)、具體實現(xiàn)這些函數(shù),其中通信的函數(shù)中需要建立socket connection來和 Xserver 通信。3)、同樣在)(server中也定義socket connection,此時可通過自定義的通信協(xié)議,創(chuàng)建一些事件,比如鍵盤、鼠標(biāo)器等按鍵事件的監(jiān)聽器(Listener)。4)、在事件響應(yīng)函數(shù)中將收到的事件轉(zhuǎn)換格式,使得相應(yīng)的應(yīng)用程序能夠識別,如果是請求/關(guān)閉軟鍵盤的事件,則通知WineProxy的彈出/關(guān)閉軟鍵盤操作。5)、Xserver中加入與上層dll通信的函數(shù),完成請求判斷鼠標(biāo)區(qū)域、輸入字符轉(zhuǎn)發(fā)等通信任務(wù)。通過實現(xiàn)上述功能后,一個完整的軟鍵盤輸入操作的流程如下1.使用者點擊屏幕上的某個區(qū)間。2. WineProxy 的 onTouchEvent ()得到調(diào)用。3. WineProxy 將此事件通過 socket 發(fā)送給 Xserver,即 TinyX。4. Xserver將此事件通知轉(zhuǎn)換成Xll協(xié)議所規(guī)定的格式,并將其轉(zhuǎn)發(fā)給應(yīng)用進程, 這個事件與feerver獲知鍵盤/鼠標(biāo)器狀態(tài)發(fā)生變化時的事件等價。5.應(yīng)用進程中的Winexll. drv. dll接收到來自Xserver的事件后,將其上交給上層的 comctl32. dll。6.上層DLL檢查此時的光標(biāo)是否落在某個可編輯的控件中,如果是就調(diào)用 ffinexll. drv. dll提供的一個API函數(shù),要求彈出軟鍵盤。7. ffinexll. drv. dll將彈出軟鍵盤的要求發(fā)送給)(server。8. Xserver進行格式轉(zhuǎn)換之后將請求轉(zhuǎn)發(fā)給WineftOxy。9. WineProxy 彈出軟鍵盤。10.使用者在軟鍵盤上按下某個鍵。
11. WineProxy的onTextChange ()得到調(diào)用,從其iTextView的緩沖區(qū)中獲取鍵入的字符,并將其發(fā)送給feerver。12. feerver收到來自WineProxy的輸入字符,將其轉(zhuǎn)發(fā)給應(yīng)用進程中的Winexll. drv. dll ο13. Winexll. drv. dll 向應(yīng)用進程發(fā)送一個 WM_CHAR 消息。14.應(yīng)用進程接收到WM_CHAR消息。
15.使用者點擊回車鍵或點擊不可編輯的區(qū)間,關(guān)閉軟鍵盤。本發(fā)明通過采用一個統(tǒng)一的機制,來管理鍵盤/鼠標(biāo)器的輸入和屏幕輸出,使得 TinyX和Android在軟鍵盤按下時的不相互沖突,同時解決了在什么時候要(在屏幕上)彈出軟鍵盤、而什么時候又不應(yīng)該彈出軟鍵盤的問題。以上所述僅為本發(fā)明的優(yōu)選實施方式,但本發(fā)明保護范圍并不局限于此。任何本領(lǐng)域的技術(shù)人員在本發(fā)明公開的技術(shù)范圍內(nèi),均可對其進行適當(dāng)?shù)母淖兓蜃兓@種改變或變化都應(yīng)涵蓋在本發(fā)明的保護范圍之內(nèi)。
權(quán)利要求
1.Wine與安卓手機軟鍵盤輸入的整合方法,其特征在于,包括步驟1,當(dāng)發(fā)生軟鍵盤事件時,Wine代理向X視窗服務(wù)進程發(fā)出事件通知;步驟2,X視窗服務(wù)進程按照預(yù)定的格式對事件通知進行轉(zhuǎn)換后,將轉(zhuǎn)換后的事件通知發(fā)送至Winexll. drv中的鍵盤/鼠標(biāo)器輸入處理程序;步驟3,Winexll. drv將軟鍵盤事件上交到公共控件管理模塊,公共控件管理模塊決定彈出軟鍵盤;步驟4,X視窗服務(wù)進程將來自Wine的彈出軟鍵盤請求轉(zhuǎn)發(fā)給Wine代理,Wine代理執(zhí)行彈出軟件盤操作。
2.如權(quán)利要求1所述的整合方法,其特征在于,安卓手機為Ophone手機。
3.如權(quán)利要求1或2所述的整合方法,其特征在于,步驟1中,當(dāng)發(fā)生軟鍵盤事件時,調(diào)用函數(shù)Wine代理的函數(shù)OnI1OuchEvent ()。
4.如權(quán)利要求3所述的整合方法,其特征在于,步驟1中,Wine代理通過套接字將軟件盤事件發(fā)送至X視窗服務(wù)進程。
5.如權(quán)利要求4所述的整合方法,其特征在于,步驟2中,X視窗服務(wù)進程將轉(zhuǎn)換后的事件通知發(fā)送至應(yīng)用進程。
6.如權(quán)利要求5所述的整合方法,其特征在于,步驟3中,應(yīng)用進程中的Winexll.drv. dll將事件通知上交至公共控件管理模塊的comctl32. dll。
7.如權(quán)利要求6所述的整合方法,其特征在于,步驟3中,comctl32.dll判斷光標(biāo)落在可編輯的控件中,決定彈出軟鍵盤。
8.如權(quán)利要求7所述的整合方法,其特征在于,步驟3中,Winexll.drv. dll將彈出軟鍵盤的請求發(fā)送至X視窗服務(wù)進程。
9.如權(quán)利要求8所述的整合方法,其特征在于,步驟4中,X視窗服務(wù)進程進行格式轉(zhuǎn)換之后將彈出軟鍵盤的請求轉(zhuǎn)發(fā)給Wine代理。
10.如權(quán)利要求9所述的整合方法,其特征在于,還包括步驟5,用戶按下軟鍵盤的某個鍵后,調(diào)用WineProxy的函數(shù)onTextChange ();步驟6,從TextView的緩沖區(qū)中獲取鍵入的字符,并將其發(fā)送給X視窗服務(wù)進程;步驟7,X視窗服務(wù)進程將字符轉(zhuǎn)發(fā)給應(yīng)用進程中的Winexll. drv. dll ;步驟8,Winexll. drv. dll向應(yīng)用進程發(fā)送一個WM_CHAR消息;步驟9,應(yīng)用進程接收到WM_CHAR消息;用戶點擊回車鍵或點擊不可編輯的區(qū)間,關(guān)閉軟鍵盤。
全文摘要
本發(fā)明公開了Wine與安卓手機軟鍵盤輸入的整合方法,包括步驟1,當(dāng)發(fā)生軟鍵盤事件時,Wine代理向X視窗服務(wù)進程發(fā)出事件通知;步驟2,X視窗服務(wù)進程按照預(yù)定的格式對事件通知進行轉(zhuǎn)換后,將轉(zhuǎn)換后的事件通知發(fā)送至Winex11.drv中的鍵盤/鼠標(biāo)器輸入處理程序;步驟3,Winex11.drv將軟鍵盤事件上交到公共控件管理模塊,公共控件管理模塊決定彈出軟鍵盤;步驟4,X視窗服務(wù)進程將來自Wine的彈出軟鍵盤請求轉(zhuǎn)發(fā)給Wine代理,Wine代理執(zhí)行彈出軟件盤操作。本發(fā)明使解決了Wine和Android/OMS關(guān)于軟鍵盤輸入的整合問題,同時解決了彈出、關(guān)閉軟鍵盤的時機與途徑問題。
文檔編號G06F9/44GK102331927SQ20111017284
公開日2012年1月25日 申請日期2011年6月24日 優(yōu)先權(quán)日2011年6月24日
發(fā)明者傅唯威, 徐鼎鼎, 毛德操, 王承志, 陳天洲 申請人:浙大網(wǎng)新科技股份有限公司