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