羅志聰 許昊 葉廷東
?
基于Android平臺的模擬計算機輸入設備研究*
羅志聰 許昊 葉廷東
(廣東輕工職業技術學院)
基于Android平臺的移動性和開放性,為增強與Windows平臺的互操作性,提出Android智能終端模擬計算機輸入設備的解決方案。模擬計算機輸入設備采用面向對象開發PC端服務程序,通過TCP/IP協議建立無線通訊連接,采用Socket網絡編程和自定義通訊協議和數據幀,實現Android智能終端模擬計算機輸入設備的設計方案。經運行測試,模擬計算機輸入設備可在無線局域網覆蓋范圍內模擬鼠標、鍵盤、游戲手柄、遙控器和體感器等5種輸入設備,具備良好的兼容性。
Android;面向對象編程;Socket;人機交互;輸入設備
隨著Android智能手機的快速發展,越來越多的設備制造商和網絡運營商加入到Android系統平臺的陣營。大量Android應用程序由第三方開發,使得Android系統的應用幾乎覆蓋人們生活的方方面面[1]。在傳統應用中鼠標、鍵盤、游戲手柄等計算機輸入設備,由于空間局限和集成度低等問題,限制了人機交互的易用性和操作體驗。基于此,本文設計一種基于Android平臺的集成度高、簡便、成本低的人機交互方案,實現Android智能終端模擬Windows系統的計算機輸入設備。
Android是一套開放性移動設備綜合平臺,包括操作系統、中間件和一些關鍵的平臺應用。Android平臺開放性的特點,既能促進技術(包括平臺自身)的創新,又有助于降低開發成本,還可使運營商非常方便地制定特色化的產品[2]。本文設計的Android智能終端模擬計算機輸入設備包括Android智能終端應用程序和PC端服務程序,采用Socket網絡編程設計[3],通過TCP/IP網絡連接進行雙向通訊[4]。Android智能終端程序基于Android操作系統,使用Java語言開發;PC端程序運行在Windows 7 professional 32 bit系統平臺,使用C++語言開發。利用Android智能終端設備的屏幕觸控輸入、實體按鍵和各種傳感器,模擬傳統計算輸入設備,并通過WiFi網絡通訊實現模擬輸入設備的無線操控。模擬計算機輸入設備還自定義了PC與Android智能終端的通信協議[5-6],將通訊模塊封裝成Android智能終端與PC雙向通訊的類庫,以實現軟件的分層架構,便于模擬計算機輸入設備的靈活擴展[7]。
Android端將用戶采集的數據及指令發送至PC端;PC端將接收的數據包進行數據解析處理,再映射至PC端;最后在用戶程序界面響應用戶操作。模擬計算機輸入設備的整體架構如圖1所示。

圖1 模擬計算機輸入設備架構圖
Android智能終端連接PC端后,選擇模擬的操作設備,Android端程序通過采集用戶操作相應的數據,封裝成自定義格式的數據包,通過Socket將數據包發送至PC端[7]。
PC端應用程序啟動后,默認狀態下,在59671網絡端口偵聽,接收到Android智能終端發來的數據包后進行報文解析。程序從數據包中解析出數據和指令,調用相應的驅動API映射至PC端。Android端、PC端應用程序流程圖如圖2所示。

圖2 Android端、PC端應用程序流程圖
模擬計算機輸入設備雙向傳遞的數據分為采集數據和指令數據。采集數據包括屏幕的觸控數據、傳感器數據和實體按鍵等信息;指令數據是Android程序用戶界面采集的用戶數據信息。數據被采集后封裝并通過Socket發送到PC端。模擬鼠標實現過程的數據處理操作步驟如下:
1)采集觸摸屏數據,通過對Android系統GestureDetector類的繼承,捕獲手機的各種操作手勢,通過OnTouch()事件,捕獲event.X 與evet.Y的前后差值;
2)模擬鼠標實體按鍵,從已封裝的指令層里調用相應的指令,如鼠標的左鍵指令為0x0002,讓PC端識別;
3)發送與接收,當Android智能終端觸發屏幕滑動或虛擬鍵點擊時,發送實時數據與指令,PC端使用線程Accept()函數進行監聽;
4)數據解析,每一個數據包都有包頭和包體,包頭識別操作動作,包體為實時數據和指令,PC端與Android智能終端擁有相同的數據結構,通過相應的數據結構對數據進行解析;
5)數據映射,通過系統的API將數據映射到PC端,如通過SetCursorPos(int X, int Y),映射鼠標移動。
為解決傳輸高并發時數據黏合、數據傳輸錯誤和通訊延遲的問題,本文參照TCP/IP協議的數據包解析方法,給發送的數據包增加包頭。在包頭加上標志位、長度和結束位等字段,用于區分不同的數據包并實現解析數據包時的處理用途。PC端接收到數據包后具體處理如下:先讀取包頭結構體的長度和結束位字段,以標志位區分數據包類型;再通過自定義的結構體解析接收的數據包;最后對應取出模擬計算機輸入設備所需數據。
數據報文包括包頭和包體部分。包頭包含包頭指令和包體長度。PC端應用程序根據包頭指令獲得該數據包的操作指令,再通過包體獲得操作所需要的數據。數據包的結構定義和一個數據包的示例如圖3所示,其中數據包示例是模擬計算機輸入設備為體感方向盤的運行,包頭指令1表示數據由手機加速計產生;12代表數據包為12個字節。0.0,0.9,0.3分別代表手機該時刻,,軸方向的重力加速度分量。

圖3 數據包結構定義和數據包示例
經測試,以上處理方式可使通訊包的發送速度達到50包/s,1個數據包傳輸并解析所耗費的時間僅需20 ms,較好解決了模擬計算機輸入設備兩端通訊延遲的問題,使系統具備良好用戶體驗。
Android終端雖然支持多點觸控,但無法讓2個控件同時獲得焦點。模擬計算機輸入設備實現無線鍵盤的常用組合鍵時,如Ctrl+C,需捕捉Android終端屏幕用戶同時按下的多個按鍵。組合按鍵功能的實現流程為:
1)第一次按下時,控件1獲得焦點;
2)第二次按下,取第二次與第一次按下位置的相對坐標;
3)根據步驟2)獲得的相對坐標和控件1的位置,計算第二次按下的點在Andriod設備屏幕上坐標;
4)根據步驟3)獲得的坐標,判斷該坐標是否在控件2里面;若在則控件2已按下,調用程序向PC端發送組合鍵指令,由PC端調用相應的代碼實現組合鍵功能。
模擬計算機輸入設備應用程序采用面向對象的思想設計,程序架構清晰靈活,易于擴展和移植。開發過程中通過自定義的PC端與Android智能終端的通信協議,將通訊模塊封裝成Android端與PC端程序雙向通訊的類庫,實現軟件的分層架構,便于程序擴展。
Android端程序將不同的功能封裝在相應的類里面。SocketFactory類負責與PC端通訊;Instruction類負責操作指令;DataConvert負責數據處理和轉換;AcpOrderAdapter類和AcpDataAdapter類進行界面和通訊之間的數據適配。用戶操作指令數據參照TCP/IP數據包傳送協議,為數據封上包頭以加快數據的解析速度。Android端程序類設計圖如圖4所示。

圖4 Android端程序類設計圖
PC端服務程序類的設計與Android端程序類相對應,為每個模擬的計算機輸入設備設計一個類。ManagerAll類是程序的核心,負責程序流程的處理,PC端程序類設計圖如圖5所示。

圖5 PC端程序類設計圖
ManagerAll類部分核心定義代碼如下:
class ManagerAll
{public:
ManagerAll(void);
~ManagerAll(void);
VoidUpdate();
//ManagerAll中對各個類不斷處理的方法
void InitDeviceStatus(DeviceStatus gs, int i);//設備當前狀態初始化數據
void DeviceStatusManager(int Type); //設備狀態管理
void ShowReceiveMSG(int Type); //顯示接收到數據的值
public:
//類的實例
......
private:
//==結構體變量用來記錄設備當前狀態==
DeviceStatus g_DeviceStatus; //定義一結構體類型用于記錄設備狀態
//=接收到各種數據=
SwitchEvent deviceSwitch;
SensorEvent event;
KeybdEvent vkeybd;
GestureTwo gestureTwo;
GestureSix gestureSix;
CString str; };
PC端采用微軟公司的Windows 7 32位專業版,Android智能終端選用運行Android 4.4的三星智能手機,分別安裝模擬計算機輸入設備對應的PC端程序和Android端程序。PC服務端物理機和Android智能手機確保連接在同一個WiFi熱點,在PC端點擊開啟服務,Android端點擊WiFi鍵進行連接,PC端程序運行界面如圖6所示。
Android端程序與PC端程序成功連接后,輸入正確驗證碼,即可登錄Android程序端主程序,用戶可通過點擊各圖標進入模擬PC輸入設備界面。
當選擇游戲手柄時,Android終端可模擬X-Box游戲手柄,通過方向鍵、搖桿對游戲的方向進行控制,A,B,X,Y鍵對游戲人物動作進行操作;當選擇體感方向盤時,Android終端通過用戶向上、下傾斜實現加速和減速;左、右傾斜實現左轉和右轉;音量加減鍵實現加檔和減檔;菜單鍵實現切換視圖操作。Android端主界面與模擬手柄、體感方向盤操作效果如圖7所示。

圖6 PC端程序運行界面

圖7 Android端主界面與模擬手柄、體感方向盤操作效果
模擬計算機輸入設備運行測試結果正常,其功能實現和響應時間描述如表1所示。

表1 模擬計算機輸入設備運行測試結果
由運行測試可知,Android智能終端模擬計算機輸入設備使1臺Android智能終端可替代無線鼠標、無線鍵盤和操縱桿等通用PC輸入設備,對Windows 7桌面系統兼容性良好,達到近乎實時的流暢操作。模擬計算機輸入設備操作簡單、移動便攜、高度集成,僅需要1臺安裝Android 2.2以上系統的智能終端,即可模擬5種PC輸入設備,并支持部分體感設備的模擬,可兼容市面上主流的游戲操控,也可為游戲公司開發定制接口,因此具有較廣闊的應用前景以及經濟效益。
[1] 李杜.基于Android平臺的無線鼠標設計與實現[D].蘭州: 蘭州大學,2012.
[2] 公磊,周聰.基于Android的移動終端應用程序開發與研究[J].計算機與現代化,2008(8):85-89.
[3] 單家凌,葉潤發.基于Wifi的Android通信系統[J].計算機系統應用,2014,23(5):69-72.
[4] 趙軍偉,劉勛,董浩.基于TCP協議的遠程監控系統的實現[J].中國測試,2010,36(1):78-81.
[5] 丁亦喆,廖楠楠,田津浩.基于Android系統的智能交互APP設計思路研究[J].信息記錄材料,2018,19(5):78-79.
[6] 張雅楠,楊璐,鄭麗敏.基于Android手機的遠程視頻監控系統的設計與開發[J].計算機應用,2013,33(S1):283-286.
[7] 張允剛,劉常春,劉偉,等.基于Socket和多線程的遠程監控系統[J].控制工程,2006,13(2):175-177.
Research of Simulating Computer Input Device Based on Android Platform
Luo Zhicong Xu Hao Ye Tingdong
(Guangdong Industry Technical College)
Aiming at the mobility and openness of the Android platform, to enhance its interoperability with the Windows platform, this paper proposes a solution for Android devices to simulate computer input devices under Windows system. In this system,PC server-side program is developed with object - oriented programming, establishes wireless communication connection through TCP/IP protocol, uses Socket network programming and self-defining communication protocol and datagrams. The experiment shows that,this system can stably simulate 5 kinds of Android intelligent terminal input devices, such as mouse, keyboard, game handle, remote controller and somatosensory device under the WiFi coverage. It is a human–computer interaction solution designed for industrial scenes of good compatibility, low cost and easy to use.
Android; Object-Oriented Programming; Socket; Human-Computer Interaction; Input Device
羅志聰,男,1980年生,碩士,講師,主要研究方向:軟件工程、大數據應用。E-mail: imronin@gmail.com
許昊,男,1982年生,碩士,副教授,主要研究方向:軟件工程。
葉廷東,男,1976年生,博士,副教授,主要研究方向:智能控制。
基金項目:廣東省科技計劃項目(2015A020214025, 2015A070710030),廣東省“千百十工程”人才資助項目(RC2016-005),廣州市產學研協同創新重大專項(201604020049)。