摘 要:Android智能手機是目前應用最廣泛的智能手機平臺。音樂、視頻播放是目前手機的通用軟件,雖然應用廣泛,但在音頻文件和視頻文件等共享方面還停留在傳統的文件拷貝上,費時費力。如果研發一種具備通過手機甩動,能快速傳遞資料方法的音樂、視頻播放器,將提高用戶手機文件共享的便利性。本文詳細介紹了手機甩動觸發事件的機理,并介紹了目前常用的兩種發送方法:利用服務器轉發和SOCKET的點對點傳送,為廣大Android智能手機愛好者提供寶貴的參考價值。
關鍵詞:Android;甩動發送;服務器;SOCKET
1 引言
Android是以Linux為基礎的開放源碼操作系統,主要用于便攜設備。作為谷歌企業戰略的重要組成部分,基于Android的各種移動設備已被廣大的用戶使用。因此使得基于Android平臺的開發得到了巨大的發展。
音樂、視頻播放是目前手機的通用軟件,雖然應用廣泛,但在音頻文件和視頻文件等共享方面還停留在傳統的文件拷貝上,費時費力。如研發一種具備通過手機甩動,能快速傳遞資料方法的音樂、視頻播放器,將提高用戶手機文件共享的便利性。
在Android手機平臺上實現兩臺媒體間的資料傳輸有很多途徑,但是方法就兩種。一種是一對多的傳輸,一種是點對點的傳輸。
一對多的傳輸,其實就是在兩臺媒體之間再找一個媒介,也就是設置一個服務器做中轉站,“中轉”要傳輸的資料。目前,通過STRUTS在TOMCAT服務器上構建一個“中轉站”已非難事,因此,關于文件傳輸的第一個方法是通過服務器來解決。
一對一的傳輸,就是兩個手機間直接傳輸,可通過SOCKET解決點對點傳輸問題。
2 實現方法
2.1 甩動方式的事件機制
甩動方式發送文件是通過調用設備中的加速度感應器來實現。通過建立實現Android設備中的SensorListener接口ShakeSensorActivity類,并在該類中添加加速度偵聽事件,通過判斷設備X、Y、Z方向的總晃動值,判斷是否需要觸發傳送事件,如圖1所示。
以音樂播放器模塊為例,如果以設備總晃動值100作為一個測試判斷點,那么當你甩動手機,總晃動值大于100時,在音樂播放界面時就Intent發送操作。
2.2 服務器方式傳輸原理
服務器方式傳輸原理如圖2所示,通過WLAN無線網絡,利用服務器完成手機間文件傳輸。
圖1 甩動事件機制類圖 圖2服務器方式傳送流程圖
通過Struts框架完成手機和服務器端的文件傳送軟件,服務器端代碼運行在Tomcat服務器,通過Http協議實現傳輸。
2.3 服務器方式傳輸設計
2.3.1 手機端和服務器設置在同一局域網內,編寫代碼實現手機端和服務器的連接。
2.3.2 編寫代碼,完成客戶端將歌曲的相關信息上傳到服務器的功能,核心代碼如下:
……
HttpPost hp=new HttpPost(uploadurl);
MultipartEntity me=new MultipartEntity();
……
if(hr.getStatusLine().getStatusCode()==HttpStatus.SC_OK){
Message msg=handler.obtainMessage();
msg.what=1;
msg.obj=“分享成功”;
handler.sendMessage(msg);
}else{
Message msg=handler.obtainMessage();
msg.what=1;
msg.obj=“分享失敗”;
handler.sendMessage(msg);
}
……
2.3 編寫代碼,完成服務器接收到歌曲,并提供給下一臺設備下載。
2.4 SOCKET方式傳輸原理
SOCKET方式傳輸原理是:將接收者的手機當作服務器,開啟服務器端程序,等待接收發送者的手機通過甩動并將需要發送的文件發送到接收者的手機上,具體見圖3所示。有時為了更方便操作,可將接收者通過廣播方式,將自己的IP地址進行廣播,發送方在接收到廣播信息后,記錄廣播者地址,當需要發送時,選擇該地址即可。
2.5 SOCKET方式傳輸設計
2.5.1 作為服務器端的手機獲取本機的IP地址。
2.5.2 作為傳輸端的手機輸入/選擇對方IP地址進行連接。
2.5.3 兩只手機連接成功進行文件傳輸。
傳輸端核心代碼:
……
if(socket.isConnected()){ handler.sendEmptyMessage(UPLOAD_ING);
reader = new DataInputStream(new BufferedInputStream(new FileInputStream(audioFile)));
out = new DataOutputStream(socket.getOutputStream());
out.writeInt(UP_LOAD);
out.writeUTF(fname);
int bufferSize = 2*1024;
buf = new byte[bufferSize];
int read = 0;
while((read = reader.read(buf)) != -1){
out.write(buf, 0, read);
}
handler.sendEmptyMessage(UPLOAD_SUCCESS);
}
……
3 測試結果
3.1 服務器方式傳輸測試
3.1.1 進入播放頁面甩動手機,選擇好友wjy發送。
3.1.2 歌曲上傳到服務器。
3.1.3 將用戶切換至剛才選擇的wjy,會出現好友分享成功提示。
3.2 SOCKET點對點方式傳輸測試
3.2.1 作為服務器端的手機獲取本機IP。
3.2.2 作為傳輸端的手機輸入對方IP進行連接。
4 結束語
智能手機通過甩動完成資料快速傳遞是利用Android手機中的加速度感應器實現。傳送文件有兩種途徑:一種為服務器傳送,這種方式相對來說穩定。一種為Socket點對點傳送,這種方式相對來說比較簡潔,設計者可根據需要選擇其中一種完成。
參考文獻
[1]王秀芳,楊陽.基于Android的YOBO在線音樂播放器[J].科學技術與工程,2011,11:2506-2509.
[2]張正政,林耀榮.基于Android系統的影音播放器開發[J].現代電子技術,2011,02:5-8.
作者簡介:謝思健(1991-),男,寧波大紅鷹學院信息工程學院,研究方向:軟件開發。
楊昱 (1969-),男,副教授,研究方向:軟件開發,文本檢索。