摘要:本文給出一種在移動互聯網中實現端對端傳輸的方法。具體來說就實現在兩臺智能手機之間自由傳輸數據。通過使用網站和遠程服務器來搭建數據中心,同時使用來電顯示號碼來喚醒收方手機下載已上傳數據從而實現即時傳輸。
關鍵詞:透明傳輸 來電顯示 遠程數據庫
1 概述
在移動互聯網中常出現一類技術需求,就是要求兩臺手機之間傳輸數據。類似的例子為手機端QQ和微信之類的聊天軟件。實現端對端的數據傳輸可以使用下列兩種方法,其一為端和端之間建立網絡聯接如GPRS網絡或Wifi網絡。其二為通過遠程服務器中轉數據。數據從發方發送到遠程服務器,遠程服務器處理后再轉發給收方。第一種方法的GPRS網對于作為服務器的移動終端而言硬件要求會比較高,而且占用較多資源,Wifi網絡比較難于實現遠程數據傳輸,所以我們不使用第一種方法。第二種方法中比較容易實現的是手機端從服務器上下載和上傳數據,但遠程服務器找到手機比較困難,一般來說解決方案為使用第三方推送服務,比如極光推送或個推推送但費用和技術難度較大。故本文給出一種不使用第三方推送方案來解決端對端通訊的方法,具體如下:發方上傳本機號碼及數據到遠程服務器同時撥打收方電話,收方在接到發方電話后,首先自動掛斷發方電話,然后根據來電顯示的號碼到服務器上下載剛才發方上傳的數據。
2 系統的具體設計
2.1 發方工作:編寫一個android程序名為Tel01.首先在其中添加三個文本編輯框分別用于輸入本機號碼,收方號碼及傳輸數據三項,然后再添加兩個按鈕,名為“發送”和“退出”分別用發送傳輸數據和退出程序。
其中關鍵的“發送”按鈕命令主要為上傳數據和撥打收方電話,上傳數據代碼如下:
String strlocal=tel_local.getText().toString();(注:取三個文本框的值,同略)
String URL = "http://***.com/ZYY/app_t01.asp";(注:遠程數據庫入口,通過網頁)
Hp hp = new Hp(URL);
List
p.add(new BasicNameValuePair("local_no",strlocal));(注:上傳本地號碼,同略)
hp.setEntity(new UrlEncodedFormEntity(p,HTTP.UTF_8));
HttpRes res = new DefaultHttpClient().execute(hp); (注:執行上傳)
撥打電話代碼:strtarget為文本框取出收方電話號碼。
IntentmyIntentDial=new
Intent("android.intent.action.CALL",Uri.parse("tel:"+strtarget));
startActivity(myIntentDial);
2.2 收方工作:編寫一個android程序名為Tel02.完成兩個功能,其一是在接到發方電話時自動掛斷,其二是與此同時下載發方上傳的數據。
switch (state) { (注:實時掌握手機狀態)
case Tel.CALL_STATE_IDLE: break;(注:當電話空閑時的代碼)
case Tel.CALL_STATE_OFFHOOK: break; (注:當電話正在通時的代碼)
case Tel.CALL_STATE_RINGING:
cleckTel(phoneNumber);
downData(phoneNumber); break;(注:當電話正有人撥號時的代碼)}
自動掛斷代碼cleckTel(phoneNumber)為
int k=1;
while(k<所有收方電話號碼總數+1) {
if(phoneNumber.equals(m[k])) { (注:phoneNumber為發方來電號碼,m為發方號碼數組)
EndTel();}(注:EndTel()為掛斷電話函數)
k++; }
下載遠程服務器數據downData(phoneNumber):
String URL = "http://***.com/ZYY/app_t02.asp";
Hp hp = new Hp(URL);
List ValuePair>(); p.add(new BasicNameValuePair("phone_no",phoneNumber));(注:上傳來電號碼) hp.setEntity(new UrlEncodedFormEntity(p, HTTP.UTF_8)); HttpRes res = new DefaultHttpClient().execute(hp); back = EntityUtils.toString(res.getEntity(),"GB2312");(注:返回發方上傳數據) JSONObject r = new JSONObject(back); String content=result.getString("c1");(注:返回發方上傳最后一個數據) strCode.setText(content);(注:tel02 中文本框顯示出來) String time=result.getString("t1");(注:返回發方上傳上傳最后一個數據時間) strTime.setText(time); (注:tel02 中文本框顯示出來) 參考文獻: [1]韓超,梁泉著.Android系統原理及開發要點詳解[M].電子工業出版社. [2]余志龍,陳昱勛著.Google Android SDK開發范例大全[M].人民郵電出版社. [3]《The Android Developer's Cookbook》 James Steele / Nelson To Addison-Wesley Professional. 作者簡介:姚宏(1979-),女,江西贛州人,助理講師,研究方向:計算機。