


摘 要:本系統采用C/S模式,客戶端采用Android開發平臺,服務器端采用Java開發環境,客戶端與服務器端之間的連接通過Socket通信,提供對圖像信息的基本操作,包括圖像添加、刪除、查找、上傳以及分類等,從而實現了一種基于Socket的手機圖像采集和傳輸系統。
關鍵詞:Android;Camera;C/S模式;Socket
1 引言
在2G時代,圖像的采集僅保存于手機內存卡上,對內存卡的要求比較高,并且圖像的傳輸受限于較小的傳輸介質覆蓋范圍和帶寬,手機等移動終端上圖像實時傳輸的應用實例并不多,形式上也多為定期的圖片傳輸。隨著網絡的高速發展,在Android系統中圖像流的采集和傳輸越來越快速、便捷,大多都利用傳輸媒介保存到遠程服務中,比較常見的傳輸媒介有3G、EDGE及WiFi等。
本文設計和開發了一種將大量圖片保存在遠程服務器的手機圖像采集和傳輸系統,不僅減輕了手機客戶端的存儲壓力,同時還可進行圖片的遠程備份和編輯,使整個圖片保存更有條理,管理更方便。
2 系統功能概述
本系統實現了在手機端對實時景象進行采集,并上傳到遠程服務器,同時對上傳圖像提供分類、查找功能。系統采用C/S模式,客戶端和服務器端采用Socket進行連接??蛻舳耸褂肁ndroid開發平臺,負責進行圖像的采集和保存、瀏覽,并選擇上傳到遠程服務器端。服務器端采用Java開發,負責將上傳的圖片保存到數據庫中,實現圖片編號、添加、查找、編輯和分類功能。
3 系統關鍵技術
3.1 Socket連接
Socket用于描述IP地址和端口,在連接成功時,應用程序兩端都會產生一個Socket實例,操作這個實例,完成所需的會話。套接字之間的連接過程可以分為三個步驟:服務器監聽,客戶端請求,連接確認[2][3],如圖1所示。
3.2 Camera類
通過實現android.hardware.Camera.PictureCallback接口,在onPictureTaken重載函數中,獲取當前拍攝的圖像數據,實現拍照保存的流程如下[4]:
4 系統的主要實現
4.1 客戶端
圖像采集功能主要通過重載onPictureTaken函數,將拍下的圖像數據發送到一個指向文件的輸出流中,將圖像保存到文件中:
public void onPictureTaken(byte[] arg0,Camera arg1) {
bitmap.compress(Bitmap.CompressFormat.JPEG,80, bOutputStream);
bOutputStream.flush();
bOutputStream.close();}
客戶端在連接服務器上傳圖片時,本機的端口不需要指定,系統會自動選取一個當前不用的端口與服務端固定端口連接:
Socket s = new Socket(SERVER_ADDR,SERVER_PORT);
OutputStream out = s.getOutputStream();
InputStream in = new FileInputStream(a);
while((i in.read())!=-1) {out.write(i); }
4.2 服務器端
⑴服務器端開啟socket連接服務,等待客戶端的連接,準備接收圖片:
⑵得到發送方的輸入流:
ServerSocket server = new ServerSocket(SERVER_PORT);
Socket s = server.accept();
InputStream in = s.getInputStream();
BufferedReader bf = new BufferedReader(new InputStreamReader(in));
⑶構造保存文件的文件輸出流:
OutputStream out = new FileOutputStream(\"d:/\"+file_name+\".jpeg\");
⑷從輸入流按字節循環讀取字節,發給輸出流,直到輸入流結束:
while((i=in.read())!=-1){out.write(i);}
5 結束語
本文分析了Android操作系統中圖像采集、顯示與傳輸相關的各種關鍵技術,基于Android平臺,結合網絡圖像傳輸技術,設計并實現了一個手機圖像采集和傳輸系統,該系統可運行于3G無線通信網絡和WLAN無線網絡,具有終端功能完善、可擴展性強等特點,達到了最初的設計目的。
[參考文獻]
[1]王向輝,張國印,陳潔.Android應用程序開發[M].北京:清華大學出版社,2010.
[2]Douglas E.Comer, David L.Ste.用TCP/IP進行網際互連—客戶-服務器編程與應用[M].北京:電子工業出版社,2009.
[3]劉淼.嵌入式系統接口設計與Linux驅動程序開發[M].北京:北京航空航天大學出版社,2006.
[4]朱國斌,基于Android系統的Camera模塊設計和實現[D].西安:西安電子科技大學,2011.