Android之短信

本文详细阐述了如何在客户端接收短信并通过广播通知服务器,服务器响应获取短信内容、时间及发送者信息,并实现短信自动回复的功能。通过Android的短信接收器、广播事件和HTTP请求,实现了客户端与服务器之间的实时互动。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

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

2、VideoManageAction中增加方法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();//终止广播

}

测试:

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值