王彥彥,趙麗,白永紅
(晉中學院信息技術與工程學院,晉中 030619)
基于Android手機智能控制系統(tǒng)的研究與實現(xiàn)
王彥彥,趙麗,白永紅
(晉中學院信息技術與工程學院,晉中 030619)
基于可移動終端的智能控制系統(tǒng)和無線網(wǎng)絡的應用研發(fā)已經(jīng)成為當下的一個研究熱點和重點。針對這一發(fā)展趨勢,設計出一個基于無線局域網(wǎng)可以和PC交互的軟件系統(tǒng)。該系統(tǒng)采用的是C/S結構,其中手機為客戶端,使用Android開發(fā)平臺編寫和實現(xiàn),PC為服務器端,兩者通過Socket進行通信。通過該系統(tǒng),用戶可以使用智能手機在Wi-Fi下控制電腦,對電腦應用軟件進行操作,并且通過使用智能手機作為終端來遠程控制電腦,與電腦完成遠程桌面連接,對電腦信息進行實時監(jiān)測,從而在很大程度上可以為用戶帶來信息的便捷和安全。
Android;遠程控制;無線網(wǎng)絡;智能終端
隨著4G網(wǎng)絡的日趨成熟,個人電腦和移動終端相互關聯(lián),這對基于移動互聯(lián)網(wǎng)的新產(chǎn)品、新應用以及新服務都提出了新的較高的要求[1]。本文采用的是一種虛擬方法,將電腦的各種應用轉移到了智能手機上,設計出一個可以直接使用的手機遠程軟件,這樣,通過手機可以直接遠程控制電腦?;谠撎攸c,手機和電腦互聯(lián)后,手機屏幕就會出現(xiàn)實時更新信息。并且通過網(wǎng)絡傳輸,傳輸數(shù)據(jù)不會離開數(shù)據(jù)中心,這樣能夠確保遠程數(shù)據(jù)傳輸?shù)陌踩?。系統(tǒng)的最終目的是實現(xiàn)手機端和PC服務器端的互聯(lián),在無線局網(wǎng)的情況下實現(xiàn)Android設備遠程控制電腦的功能[2]?;贏ndroid的手機智能控制系統(tǒng)打破傳統(tǒng)時空觀念,不受時間和地點的限制,為用戶在信息獲取和資源共享中發(fā)揮了重要的作用。
1.1 基本原理
手機和電腦之間采用的是客戶端和服務器端(C/ S)結構[3-4]。
(1)Android手機終端模塊:即客戶端,用于和用戶進行交互,將用戶的需求進行翻譯并發(fā)送給服務器端,動態(tài)獲取IP地址,通過它可以實現(xiàn)手機與PC之間通過Socket互聯(lián)。
(2)Server端模塊:監(jiān)聽客戶端的信息并發(fā)送控制命令到相應的可控設備進行服務實現(xiàn)或直接在本地執(zhí)行響應手機端驗證信息后,與手機端連接,建立遠程控制,實現(xiàn)通信。
計算機作為服務器,Android手機作為客戶端。Android手機與計算機之間通過Socket進行通信(Remote Control[5])。①服務端:Socket監(jiān)聽程序放在Thread中,實時監(jiān)聽手機端發(fā)來的信息,并返回給手機端。②客戶端:Android手機向服務端發(fā)送可控事件,并接受電腦屏幕信息,為用戶提供屏幕點觸輸入并將輸入的指令傳輸至電腦,同時顯示電腦屏幕內(nèi)容[6]??头慷撕头掌鞫送ㄟ^Socket網(wǎng)絡編程實現(xiàn)手機端和PC的鏈接,并實時監(jiān)聽。電腦和手機間的通信使用Wi-Fi為基礎的TCP/IP協(xié)議。
1.2 系統(tǒng)架構
系統(tǒng)的架構可以分為三個組件塊,如圖1所示。
(1)系統(tǒng)通信組件:實現(xiàn)Android手機端和Server服務器端的連接,采用Socket進行通信。
(2)服務端組件塊:等待并監(jiān)聽手機端發(fā)來的信息,當收到請求后啟動相關的服務,并返回給手機端,往復循環(huán)。包括的組件有控制組件、通信組件、管理者交互組件、功能組件。
(3)客戶端組件塊:Android手機端收到服務器端發(fā)來的請求后,做出響應,并將翻譯后的信息轉發(fā)給服務器??蛻舳说脑O計包括UI設計,編寫相應的XML文件確定界面的位置和大小,控制使用Activity完成。
圖1 系統(tǒng)架構圖
2.1 服務器端設計
系統(tǒng)采用C/S結構,由客戶端發(fā)送命令,服務器端響應。服務器的本質是一個手控系統(tǒng),主要功能包括:接收數(shù)據(jù)、數(shù)據(jù)獲取、數(shù)據(jù)解析、數(shù)據(jù)封裝、監(jiān)控和上傳[7]。
開啟軟件后首先進行數(shù)據(jù)的初始化,PCServer類啟動服務后,收到相關信息(端口號,IP地址),確認身份后獲取登錄權限,由主控模塊控制命令的解析和響應,判斷是否登錄成功,登陸不成功則返回false,登錄成功則進入主界面,數(shù)據(jù)獲取成功,InStreamCastByte類用于數(shù)據(jù)的輸入,進行數(shù)據(jù)封裝,數(shù)據(jù)上傳。啟動網(wǎng)絡通信模塊,獲取客戶端信息SocketSend類連接服務器,最終二者達到等價連接。
服務器端主要使用Java編寫主要分以下幾個模塊,com.java.send(數(shù)據(jù)連接),com.javateam(開啟服務器),com.study.util(信息輸入),PCmain(實現(xiàn)手機端的互聯(lián))。Android手機端發(fā)送相關請求后,由SocketSend類接受請求,對命令進行翻譯并返回給手機端,在此之前還要激活DatagramSocket()方法,對響應進行處理。手機端則通過TeamViewActivity類響應服務器。
受控狀態(tài),源IP地址,手機IP地址,端口號等服務器端參數(shù)如下。
服務器端模塊結構類包括:PCServer類為啟動類,用于啟動控制整個服務端。InStreamCastByte類用于數(shù)據(jù)的輸入。PCmain對客戶端進行服務。
2.2 客戶端設計
客戶端設計主要包括以下幾個方面:Welcome類,TeamViewActivity類,ThreadServer類。結構如圖2所示。
圖2 客戶端結構圖
客戶端的主要目的是設計并開發(fā)手機端,整合手機端功能,確定大致架構,在實現(xiàn)與服務器端相結合實現(xiàn)遠程控制功能,為開發(fā)提供基礎。其次是銜接客戶端中的各個模塊,使客戶端可獨立運行,客戶端各個模塊之間耦合程度不同。
Welcome是程序運行中開啟客戶端入口的模塊,在登錄時會加載頁面,初始化相關操作,輸入IP地址后,會進行處理有關協(xié)議,只有在接受協(xié)議的情況下才能彈出登錄界面,否則返回false。
TeamViewActivity提供登陸后的參數(shù)的加載,使用message()方法發(fā)送消息,傳遞到各個模塊,加載不成功則不發(fā)送數(shù)據(jù)消息。
ThreadServer模塊實現(xiàn)數(shù)據(jù)連接的重要模塊,changeThreadLive(),getThreadLive()方法,創(chuàng)建線程,連接服務器。
開啟客戶端的同時,系統(tǒng)會檢查網(wǎng)絡的連接情況,只有在連接網(wǎng)絡的情況下,才能登錄到服務器端,連接電腦獲取相關操作,在主模塊的設計中,不會直接加載控制電腦界面,可提供后續(xù)的功能擴展,在這種方式下,通過模塊跳轉到下一級模塊控制電腦,在此過程中無需用戶操作,系統(tǒng)會默認跳轉,直到登錄服務器,連接狀態(tài)接通,手機端就可控制Server服務器端。
TeamViewActivity控制模塊用于登錄網(wǎng)絡服務器,獲取相應的網(wǎng)絡參數(shù),例如要控制的電腦的IP地址、端口號等,并測試是否可以建立連接。如果已經(jīng)擁有一個連接,就直接顯示控制方式選擇界面。如果使用者不愿意每次都輸入相關的參數(shù),那么在此可以增加對網(wǎng)絡參數(shù)查找和編輯的功能,并且用戶還可以進行設置,讓其直接跳轉到本界面后的自動填寫的參數(shù)信息。此外,在網(wǎng)絡參數(shù)編輯界面中,用戶可以向其數(shù)據(jù)庫中添加、查找和修改相關網(wǎng)絡參數(shù)信息。com.android.androidPc包用于實現(xiàn)數(shù)據(jù)處理。com.android.welcome包用于實現(xiàn)網(wǎng)絡連接、通信等功能。
在TeamViewActivity模塊中,用戶可以設置和修改不同的系統(tǒng)參數(shù),其中包括編輯網(wǎng)絡登錄參數(shù)以及自定義控制按鈕。同時在其中加入“跳轉”按鈕,通過此按鈕,當用戶用手機控制電腦時,就可以直接跳轉到其他的控制方式,從而在不同的控制方式間進行切換,而不再需要返回控制方式選擇界面進行選擇。控制過程中會使用到多個線程,因此在退出電腦應用程序時應編寫代碼以使所有不再使用的線程都能自動關閉。在此需注意,Intent不僅只是簡單的界面跳轉、組件啟動和發(fā)送參數(shù)的作用,而且能起到幫助Android的四種基本組件之間相互調用、協(xié)調工作的媒介作用。即Intent的作用就是專門提供組件互相調用的相關信息,無需通過另外的存放和讀取,就可以實現(xiàn)調用者與被調用者之間的相互協(xié)調,。
2.3 手機屏幕觸摸事件的捕捉與處理
如今大多數(shù)的智能手機是觸摸屏設計,這給用戶的輸入帶來了極大的方便,而個人電腦現(xiàn)在還是以鍵盤和鼠標等傳統(tǒng)輸入工具為主。對鼠標進行處理時,不僅要獲取按鍵信息,還要發(fā)送相應的位置移動信息,所以模擬鼠標相較于鍵盤來說更為艱難,因此需要對屏幕觸摸事件進行捕捉和處理。
在View中和觸摸相關的方法有dispatch-TouchEvent,interceptTouchEvnet和onTouchEvent三種。其中dispatchTouchEvent負責事件從activity傳遞出來到達的就是最頂層view的dispatchTouchEvent,接著完成事件的分發(fā)工作。當interceptTouchEvent返回true,代表攔截到了,交由相應onTouchE vent來處理,相反,若interceptTouchEvent返回false,則傳遞給其子view,由子view的dispatchTouchEvent再來完成事件的分發(fā)工作[2]。
通過重寫的方法,監(jiān)聽屏幕觸摸事件可以獲取用戶觸摸屏幕的信息,如果觸摸屏幕的X、Y坐標發(fā)生了改變,那么函數(shù)中的EventEvent參數(shù)就代表當前觸摸事件的對象,其中包括當前觸摸事件的所有信息。event.getAction()方法可以獲取當前觸摸事件的名稱,并且根據(jù)觸摸事件的名稱去判斷是觸摸按下、觸摸移動、還是觸摸抬起的狀態(tài)[8]。而保存著當前觸摸屏幕的X、Y坐標信息則由event.getX()與event.getY()來完成。
2.4 電腦屏幕圖像顯示技術
在Android開發(fā)過程中創(chuàng)建的Service、Activity和Broadcast都是一個基于主線程的處理。由于其通常與用戶交互界面相關聯(lián),所以在這里一般被理解為UI線程[9]。但是如果在UI線程上有一些比較耗時的操作,比如大文件讀寫、網(wǎng)絡數(shù)據(jù)下載以及數(shù)據(jù)庫操作等,這樣就需要較長時間,還可能出現(xiàn)用戶界面阻塞并無法響應信息的提示窗口,因此需要使用Thread線程來解決。
一般有以下幾種方法來進行圖像的刷新顯示:
(1)周期性接收新的圖像,創(chuàng)建新的線程直接實時更新顯示的圖片,從而刷新UI界面,之后關閉相應的線程。雖然這樣可以實現(xiàn)圖像的刷新顯示功能,但其實質上違背了單線程模型。Android UI操作并不保證線程安全,而這些操作又必須在UI線程中執(zhí)行。因此采用周期性接收新的圖像這種方式效率高,編譯方便,但是在UI界面調用時有可能引發(fā)沖突。
(2)第二種方法是在Android平臺中可以使用Java自帶的TimerTask類[9],相對于Thread,TimerTask對資源消耗得更低,一種更好的解決方法是使用Android自帶的AlarmManagerr定時器[6]。如果使用這一方法進行圖像的刷新,就需要引入java.util.Timer包和java.util. TimerTask包,這樣UI界面調用時的沖突也會出現(xiàn)。
2.5 控制組件設計
控制組件的設計包括以下幾個方面,按鈕的觸發(fā)情況、布局、網(wǎng)絡控制和屏幕控制?;贏ndroid手機端的UI界面使用XML定義,并由Activity控制其完成。完成相關的布局,主要是登錄界面的設計與實現(xiàn),Android中的用戶界面和控制組件可以視為是一體的。
登錄界面的顯示功能以屏幕顯示為主,在設計屏幕的過程中,為了使顯示范圍更大一些,一般使用的是橫屏,控制按鈕則要和手機一樣,使用菜單按鈕來實現(xiàn)。手機屏幕的分辨率一般低于電腦屏幕,在圖像傳輸過程中就存在差異,選取的屏幕刷新方式就不同,一般采用適合手機大小的方式顯示圖像,屏幕支持多點接觸,可以對屏幕進行縮放處理,在滑動屏幕是應該注意其邊界值。
2.6 網(wǎng)絡通信組件設計與實現(xiàn)
網(wǎng)絡通信功能服務流程圖如圖3所示。
具體設計方法如下:
在實現(xiàn)連接的過程中,手機端發(fā)送的命令經(jīng)過網(wǎng)絡通信模塊,向服務器發(fā)送相關動作,并獲取圖像信息。上述方法主要基于TCP/IP協(xié)議,實現(xiàn)網(wǎng)絡通信。
在遠程控制連接中,各種服務會占用CPU,從而導致系統(tǒng)異常,所以必須讓服務器端默認可以創(chuàng)建新的線程來提供服務,用來處理突發(fā)事件,因此網(wǎng)絡通信模塊要繼承Server組件的功能模塊,這樣可以減少程序在異常情況下的死機或無響應幾率。各個功能模塊才能正常使用。
Android手機和服務器建立連接后,如圖4所示。
圖3 功能服務流程圖
圖4 手機與PC交互界面
交互界面清楚可見,只需輸入IP地址點擊連接按鈕,就可在手機上顯示電腦桌面,之后可滑動手機屏幕,檢測電腦屏幕是否有鼠標滑動現(xiàn)象,如果顯示電腦屏幕中有鼠標滑動痕跡,檢測成功,否則退出程序,重新連接。最終可以達到手機能夠流暢的連接電腦,清晰顯示電腦畫面,實現(xiàn)遠程控制的功能。
本文設計的主要目的是實現(xiàn)PC服務器端和Android手機端之間的互聯(lián),在無線局域網(wǎng)的基礎上利用Android手機設備直接遠程控制電腦。這樣通過遠程連接PC端,可以觀察到電腦上的實時信息,以便用戶做出及時的響應。但是作為針對應用的一項軟件,本系統(tǒng)還需進一步的填充和優(yōu)化。希望能在未來構建一個免費且開源的智能交互應用平臺,提供額外的功能接口,在系統(tǒng)基礎上實現(xiàn)類似物聯(lián)網(wǎng),小米智能家居等功能。
[1]吳曉光.軟件與信息技術服務行業(yè)研究報告[J].中國電子商務,2014(3):69-69.
[2]黃興.Android平臺遠程終端控制系統(tǒng)的研究與設計[D].北京郵電大學,2013,1-50.
[3]徐亮.基于Android的遠程控制系統(tǒng)[J].計算機工程,2013,39(11):281-284.
[4]江燕良.基于Android智能終端的遠程控制系統(tǒng)[J].電子技術應用,2012,38(8):136-139.
[6]肖梁軍.基于Android智能終端的遠程控制電腦系統(tǒng)設計與實現(xiàn)[D].云南大學,2012,1-69.
[7]吳優(yōu).企業(yè)信息集成平臺中的數(shù)據(jù)交換方式和安全的研究[D].華北電力大學(北京),2010,1-30.
[8]Google Android Official Website[OL].http://developer.Android.com/index.htm.
[9]余志龍,陳昱勛,鄭明杰,王世江等.Google Android SDK開發(fā)范例大全[M].北京:人民郵電出版社,2009.
A Mobile Phone Intelligent Control System Based on Android
WANG Yan-yan,ZHAO Li
(School of Information Technology and Engineering,Jinzhong University,Jinzhong 030619)
The combination of mobile phones and computers is the latest technology in recent years.In this situation,the research and development of intelligent control system based on mobile terminal and wireless network have become a research focus.Designs an interactive software system with PC based on wireless local area network.The system adapts C/S structure,and smart phone is the client that uses Android development platform to write and implement.PC is the server,and they communicate with each other with Socket.Through the system, aims at realizing the use of smart phones to control the computer under the Wi-Fi.By using smart phones,users can operate the computer application software.Smart phones,as the remote control terminal tool of computers,it can achieve resource sharing and real-time monitor of computer information.Based on this system,users can enjoy more convenient and safe service.
Android;Remote Control;Wireless Network;Intelligent Terminal
1007-1423(2017)01-0046-05
10.3969/j.issn.1007-1423.2017.01.012
王彥彥(1990-),男,寧夏隆德人,本科學士,研究方向為計算機網(wǎng)絡
2016-10-25
2016-12-25
山西省高等學校大學生創(chuàng)新創(chuàng)業(yè)訓練計劃項目(No.2016414)
趙麗(1973-),女,山西晉中人,碩士,副教授,研究方向為計算機網(wǎng)絡、網(wǎng)絡安全