摘要:本文给出一种在移动互联网中实现端对端传输的方法。具体来说就实现在两台智能手机之间自由传输数据。通过使用网站和远程服务器来搭建数据中心,同时使用来电显示号码来唤醒收方手机下载已上传数据从而实现即时传输。

关键词:透明传输 来电显示 远程数据库

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 = new ArrayList();

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);

Listp=new ArrayList

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-),女,江西赣州人,助理讲师,研究方向:计算机。