基於IBinder機制實現的自動輸入方法及裝置製造方法
2023-09-20 18:11:50
基於IBinder機制實現的自動輸入方法及裝置製造方法
【專利摘要】本發明公開了一種基於IBinder機制實現的自動輸入方法及裝置,所述方法包括激活當前的Acitivity,使目標編輯框控制項獲得焦點;在IME服務中實現靜態方法;在通用IService服務中實現IBinder接口;在IBinder接口中獲得自定義類的this指針;在自定義類中構造輸入方法;通過輸入方法接收來自外界的輸入內容;在輸入方法中調用靜態方法獲得IME服務的實例ICS;在實例ICS非空時,獲取實例ICS與當前獲得焦點的編輯框控制項的消息連接通道IC;將接收到的內容傳遞給消息連接通道IC的commitText函數提交至當前獲得焦點的編輯框控制項,完成輸入。本發明方法提升了自動化測試效率與精準度。
【專利說明】基於IBinder機制實現的自動輸入方法及裝置
【技術領域】
[0001]本發明涉及一種Android系統的自動化測試過程中實現編輯框自動輸入的方法及系統,尤其是一種基於IBinder機制實現的自動輸入方法及系統。屬於Android系統的自動化測試【技術領域】。
【背景技術】
[0002]隨著移動終端的普及,人們對移動終端的需求也越來越多、越來越高,對於移動終端製造商而言,移動終端的測試也越來越複雜,隨之而出現的是越來越多的自動化測試工具,如中國專利申請號為201110066300.6的發明專利申請,公開了「一種基於Android的自動化測試方法」,其技術特點是通過集成Android內部shell指令原理調用Android的monkey方法,實現在手機側的通過設備模擬人工操作,形成可靠的軟體穩定性測試體系,將各種測試程序進行編碼,測試時通過調用各個測試程序進行,提高測試效率,解決了現有技術需藉助計算機進行測試且需人工監視導致效率低的問題,針對的是測試上存在的問題,並沒有涉及到自動化測試自動輸入的相關問題。
[0003]而目前市面上的自動化測試工具,在自動化測試輸入的過程中,主要有兩種方式:一種是基於Instrumentation的自動輸入;另一種是基於輸入法的自動輸入;但這兩種方式在自動輸入過程中都存在局限與缺陷:基於Instrumentation的測試工具無法跨應用(跨進程)輸入;基於輸入法的自動輸入需要模擬人的點擊、選詞、取詞等操作,速度慢、不準確。
【發明內容】
[0004]本發明的目的是為了解決上述現有技術的缺陷,提供一種可以提升自動化測試效率與精準度基於IBinder機制實現的自動輸入方法。
[0005]本發明的另一目的在於提供一種基於IBinder機制實現的自動輸入裝置。
[0006]本發明的目的可以通過採取如下技術方案達到:
[0007]基於IBinder機制實現的自動輸入方法,其特徵在於:所述方法在Android系統的自動化測試過程中實現,包括以下步驟:
[0008]S1、激活當前的Acitivity窗口,使目標編輯框控制項獲得焦點;
[0009]S2、在 IME 服務 InputChineseService 中實現靜態方法 getlnstance ;
[0010]S3、在通用IService服務中實現IBinder接口 ;
[0011]S4、在IBinder接口中獲得自定義類RemoteBinder的this指針;
[0012]S5、在自定義類RemoteBinder中構造輸入方法SendRemotelnfo ;
[0013]S6、通過輸入方法SendRemotelnfo接收來自外界的輸入內容;
[0014]S7、在輸入方法SendRemotelnfo中調用靜態方法getlnstance獲得InputChineseService 的實例 ICS ;
[0015]S8、判斷實例ICS是否為空,若是,在靜態方法getlnstance中返回自身的引用;若否,獲取實例ICS與當前獲得焦點的編輯框控制項的消息連接通道IC ;
[0016]S9、將接收到的內容傳遞給消息連接通道IC的commitText函數提交至當前獲得焦點的編輯框控制項,完成輸入。
[0017]具體的,步驟S2所述IME服務InputChineseService從輸入法服務類InputMethodService 繼承。
[0018]具體的,步驟S3所述通用IService服務從Service組件繼承。
[0019]具體的,步驟S8所述獲取實例ICS與當前獲得焦點的編輯框控制項的消息連接通道IC通過調用ICS的公有方法getCurrentlnputConnection獲取。
[0020]具體的,所述輸入方法SendRemotelnfo接收的輸入內容為中文、英文或符號。
[0021]本發明的另一目的可以通過採取如下技術方案達到:
[0022]基於IBinder機制實現的自動輸入裝置,其特徵在於:所述裝置在Android系統的自動化測試過程中實現,包括:
[0023]激活模塊,用於激活當前的Acitivity窗口,使目標編輯框控制項獲得焦點;
[0024]靜態方法實現模塊,用於IME服務InputChineseService中實現靜態方法getlnstance ;
[0025]IBinder接口實現模塊,用於在通用IService服務中實現IBinder接口 ;
[0026]自定義類的this指針獲得模塊,用於在IBinder接口中獲得自定義類RemoteBinder 的 this 指針;
[0027]輸入方法構造模塊,用於在自定義類RemoteBinder中構造輸入方法SendRemotelnfo ;
[0028]輸入內容接收模塊,用於通過輸入方法SendRemotelnfo接收來自外界的輸入內容;
[0029]實例ICS獲得模塊,用於在輸入方法SendRemotelnfo中調用靜態方法getlnstance 獲得 InputChineseService 的實例 ICS ;
[0030]判斷模塊,用於判斷實例ICS是否為空,若是,在靜態方法getlnstance中返回自身的引用;若否,獲取實例ICS與當前獲得焦點的編輯框控制項的消息連接通道IC ;
[0031]內容傳遞模塊,用於將接收到的內容傳遞給消息連接通道IC的commitText函數提交至當前獲得焦點的編輯框控制項,完成輸入。
[0032]具體的,所述靜態方法實現模塊、實例ICS獲得模塊和判斷模塊中的IME服務InputChineseService 從輸入法服務類 InputMethodService 繼承。
[0033]具體的,所述IBinder接口實現模塊和自定義類的this指針獲得模塊中的通用IService服務從Service組件繼承。
[0034]具體的,所述判斷模塊中的獲取實例ICS與當前獲得焦點的編輯框控制項的消息連接通道IC通過調用ICS的公有方法getCurrentlnputConnection獲取。
[0035]具體的,所述輸入方法構造模塊、輸入內容接收模塊和實例ICS獲得模塊中的輸入方法SendRemotelnfo接收的輸入內容為中文、英文或符號。
[0036]本發明相對於現有技術具有如下的有益效果:
[0037]本發明方法及裝置將IME (Input Method Editor,輸入法編輯器)與Service的IBinder機制(IBinder接口是能進行遠程操作對象的一個基接口,定義了為在提供進程間和跨進程間的調用時提供高性能的輕量級遠程調用的核心部分,該接口描述了與遠程對象進行交互的抽象協議)結合,解決基於Instrumentation的測試工具無法跨應用(跨進程)輸入和基於輸入法的自動輸入速度慢、不準確的問題,提升了自動化測試效率與精準度。
【專利附圖】
【附圖說明】
[0038]圖1為本發明實施例的基於IBinder機制實現的自動輸入方法的流程示意圖。
[0039]圖2為本發明實施例的基於IBinder機制實現的自動輸入裝置結構框圖。
【具體實施方式】
[0040]實施例1:
[0041]在設備的Android系統中,鍵盤事件由WindowManagerService (窗口管理服務)統一管理,然後以消息的形式分發給應用程式;Android系統啟動的時候,SystemServer首先會啟動 WindowManagerService,接著 WindowManagerService 通過啟動 InputManager (輸入管理器)來監控鍵盤事件。當InputManager監控到鍵盤輸入事件時,它需要把這個鍵盤消息分發給當前激活的Activity窗口,此時,當前激活的Activity窗口需要主動註冊一個接收鍵盤消息的連接通道到InputManager中去,InputManager才能把這個鍵盤消息分發給它處理。在整個 IMF (Input Method Framework,輸入法框架)中,InputMethodManager(輸入法管理類)是其中的核心API,負責與應用程式的交互與調度,核心思想是獲得此消息的連接通道 IC (InputConnection)。
[0042]如圖1所示 ,本實施例的基於IBinder機制實現的自動輸入方法,具體包括以下步驟:
[0043]S1、激活當前的Acitivity窗口,使目標編輯框控制項獲得焦點;
[0044]S2、從 InputMethodService(輸入法服務類)繼承一個 IME(Input Method Editor,輸入法編輯器)服務InputChineseService,在InputChineseService中實現靜態方法getlnstance,如下:
[0045]
i諍態 //法 gctlnslancc:
public static InputChincscScrvicc gcllnstancc {
if(this.1CS != null )
return ICS;
return null;
}
[0046]S3、從Service組件繼承通用IService服務,實現IBinder接口 ;
[0047]S4、在IBinder接口中獲得自定義類RemoteBinder的this指針;
[0048]S5、在自定義類 RemoteBinder 中構造輸入方法 SendRemotelnfo (String CH_EN),如下:[0049]
輸入力,法 ScndRcmotcInfo(Slring CH_EN):
//CH—EN:外界輸入的中文、英文或者符號
public boolean ScndRcmolcIni'o(String CH_EN) {
//單例模式
υ>
InputChineseService ICS = InputChineseService.getlnstance;
if(ICS !=null) {
[0050]
InputConnection IC =丨 CS.getCurrcnUnputConnectionO;'
if(IC != null) !
return IC.comniitTcxl(CH_EN, 0);
}
}
} catch (Exception c) {
c.printStackTracc;
`
}
return I i\s<.}
[0051]S6、通過輸入方法SendRemotelnfo接收來自外界的輸入內容;
[0052]S7、在輸入方法SendRemotelnfo中調用靜態方法getlnstance獲得InputChineseService 的實例 ICS ;
[0053]S8、判斷實例ICS是否為空,若是,在靜態方法getlnstance中返回自身的引用;若否,調用ICS的公有方法getCurrentlnputConnection獲取實例ICS與當前獲得焦點的編輯框控制項的消息連接通道IC (InputConnection);
[0054]S9、將接收到的內容傳遞給消息連接通道IC的commitText函數提交至當前獲得焦點的編輯框控制項,完成輸入。
[0055]實施例2:
[0056]如圖2所示,本實施例的基於IBinder機制實現的自動輸入裝置包括激活模塊、靜態方法實現模塊、IBinder接口實現模塊、自定義類的this指針獲得模塊、輸入方法構造模塊、輸入內容接收模塊、實例ICS獲得模塊、判斷模塊和內容傳遞模塊,其中:
[0057]激活模塊,用於激活當前的Acitivity窗口,使目標編輯框控制項獲得焦點;
[0058]靜態方法實現模塊,用於在IME服務InputChineseService中實現靜態方法getlnstance ;所述 IME 服務 InputChineseService 從輸入法服務類 InputMethodService繼承;
[0059]IBinder接口實現模塊,用於在通用IService服務中實現IBinder接口 ;所述通用IService服務從Service組件繼承
[0060]自定義類的this指針獲得模塊,用於在IBinder接口中獲得自定義類RemoteBinder 的 this 指針;
[0061]輸入方法構造模塊,用於在自定義類RemoteBinder中構造輸入方法SendRemotelnfo ;
[0062]輸入內容接收模塊,用於通過輸入方法SendRemotelnfo接收來自外界的輸入內容;所述輸入方法SendRemotelnfo接收的輸入內容為中文、英文或符號;
[0063]實例ICS獲得模塊,用於在輸入方法SendRemotelnfo中調用靜態方法getlnstance 獲得 InputChineseService 的實例 ICS ;
[0064]判斷模塊,用於判斷實例ICS是否為空,若是,在靜態方法getlnstance中返回自身的引用;若否,調用ICS的公有方法getCurrentlnputConnection獲取實例ICS與當前獲得焦點的編輯框控制項的消息連接通道IC ;
[0065]內容傳遞模塊,用於將接收到的內容傳遞給消息連接通道IC的commitText函數提交至當前獲得焦點的編輯框控制項,完成輸入。
[0066]本實施例中使用Android系統的設備可以是手機、電子書、PDA、人機互動終端或其他具有顯示功能的手持式終端設備。
[0067]另外,本領域普通技術人員可以理解實現上述各實施例方法中的全部或部分步驟是可以通過程序來指令相關的硬體來完成,相應的程序可以存儲於一計算機可讀取存儲介質中,所述的存儲介質,如R0M/RAM、磁碟或光碟等。
[0068]以上所述,僅為本發明專利較佳的實施例,但本發明專利的保護範圍並不局限於此,任何熟悉本【技術領域】的技術人員在本發明專利所公開的範圍內,根據本發明專利的技術方案及其發明專利構思加以等同替換或改變,都屬於本發明專利的保護範圍。
【權利要求】
1.基於IBinder機制實現的自動輸入方法,其特徵在於:所述方法在Android系統的自動化測試過程中實現,包括以下步驟: 51、激活當前的Acitivity窗口,使目標編輯框控制項獲得焦點; 52、在IME 服務 InputChineseService 中實現靜態方法 getlnstance ; 53、在通用IService服務中實現IBinder接口; 54、在IBinder接口中獲得自定義類RemoteBinder的this指針; 55、在自定義類RemoteBinder中構造輸入方法SendRemoteInfo; 56、通過輸入方法SendRemoteInfo接收來自外界的輸入內容; 57、在輸入方法SendRemoteInfo中調用靜態方法getlnstance獲得InputChineseService 的實例 ICS ; 58、判斷實例ICS是否為空,若是,在靜態方法getlnstance中返回自身的引用;若否,獲取實例ICS與當前獲得焦點的編輯框控制項的消息連接通道IC ; 59、將接收到的內容傳遞給消息連接通道IC的commitText函數提交至當前獲得焦點的編輯框控制項,完成輸入。
2.根據權利要求1所述的基於IBinder機制實現的自動輸入方法,其特徵在於:步驟S2 所述 IME 服務 Inpu tChineseService 從輸入法服務類 InputMethodService 繼承。
3.根據權利要求1所述的基於IBinder機制實現的自動輸入方法,其特徵在於:步驟S3所述通用IService服務從Service組件繼承。
4.根據權利要求1所述的基於IBinder機制實現的自動輸入方法,其特徵在於:步驟S8所述獲取實例ICS與當前獲得焦點的編輯框控制項的消息連接通道IC通過調用ICS的公有方法 getCurrentInputConnection 獲取。
5.根據權利要求1所述的基於IBinder機制實現的自動輸入方法,其特徵在於:所述輸入方法SendRemoteInfo接收的輸入內容為中文、英文或符號。
6.基於IBinder機制實現的自動輸入裝置,其特徵在於:所述裝置在Android系統的自動化測試過程中實現,包括: 激活模塊,用於激活當前的Acitivity窗口,使目標編輯框控制項獲得焦點; 靜態方法實現模塊,用於IME服務InputChineseService中實現靜態方法getlnstance ; IBinder接口實現模塊,用於在通用IService服務中實現IBinder接口 ; 自定義類的this指針獲得模塊,用於在IBinder接口中獲得自定義類RemoteBinder的this指針; 輸入方法構造模塊,用於在自定義類RemoteBinder中構造輸入方法SendRemoteInfo ; 輸入內容接收模塊,用於通過輸入方法SendRemoteInfo接收來自外界的輸入內容; 實例ICS獲得模塊,用於在輸入方法SendRemoteInfo中調用靜態方法getlnstance獲得 InputChineseService 的實例 ICS ; 判斷模塊,用於判斷實例ICS是否為空,若是,在靜態方法getlnstance中返回自身的引用;若否,獲取實例ICS與當前獲得焦點的編輯框控制項的消息連接通道IC ; 內容傳遞模塊,用於將接收到的內容傳遞給消息連接通道IC的commitText函數提交至當前獲得焦點的編輯框控制項,完成輸入。
7.根據權利要求6所述的基於IBinder機制實現的自動輸入裝置,其特徵在於:所述靜態方法實現模塊、實例ICS獲得模塊和判斷模塊中的IME服務InputChineseService從輸入法服務類InputMethodService繼承。
8.根據權利要求6所述的基於IBinder機制實現的自動輸入裝置,其特徵在於:所述IBinder接口實現模塊和自定義類的this指針獲得模塊中的通用IService服務從Service組件繼承。
9.根據權利要求6所述的基於IBinder機制實現的自動輸入裝置,其特徵在於:所述判斷模塊中的獲取實例ICS與當前獲得焦點的編輯框控制項的消息連接通道IC通過調用ICS的公有方法 getCurrentInputConnection 獲取。
10.根據權利要求6所述的基於IBinder機制實現的自動輸入裝置,其特徵在於:所述輸入方法構造模塊、輸入內容接收模塊和實例ICS獲得模塊中的輸入方法SendRemotelnfo接收的輸入內容為中文 、英文或符號。
【文檔編號】G06F9/44GK103761096SQ201410030702
【公開日】2014年4月30日 申請日期:2014年1月22日 優先權日:2014年1月22日
【發明者】楊遠波, 李鵬 申請人:廣東歐珀移動通信有限公司