需要读取短信权限:
<uses-permission android:name="android.permission.RECEIVE_SMS" />
注册广播:
开机广播与收到短信广播
<receiver android:name="com.ecache.receivemessage.SMSReceiver" >
<intent-filter android:priority="999" >
<action android:name="android.provider.Telephony.SMS_RECEIVED" />
<action android:name="android.intent.action.BOOT_COMPLETED" />
</intent-filter>
</receiver>
之后要继承BroadcastReceiver类并重写onReceive方法:
public void onReceive(Context context, Intent intent) {
if (intent.getAction().equals(Intent.ACTION_BOOT_COMPLETED)) {
//开机
} else {
//收到短信
Object[] pdus = (Object[]) intent.getExtras().get("pdus");
if (pdus != null) {
for (Object pdu : pdus) {
SmsMessage sms = SmsMessage.createFromPdu((byte[]) pdu);
String adr = sms.getOriginatingAddress();//发件人手机号
if (adr.length() > 11) {
int start = adr.length() - 11;
adr = adr.substring(start, adr.length());
}
String body = sms.getMessageBody();//短信内容
//自己处理逻辑
}
}
}
}
sms主要结构:
_id:短信序号,如100
thread_id:对话的序号,如100,与同一个手机号互发的短信,其序号是相同的
address:发件人地址,即手机号,如+86138138000
person:发件人,如果发件人在通讯录中则为具体姓名,陌生人为null
date:日期,long型,如1346988516,可以对日期显示格式进行设置
protocol:协议0SMS_RPOTO短信,1MMS_PROTO彩信
read:是否阅读0未读,1已读
status:短信状态-1接收,0complete,64pending,128failed
type:短信类型1是接收到的,2是已发出
body:短信具体内容
service_center:短信服务中心号码编号,如+8613800755500
相信很多人写的短信监听应用在小米等手机上是拦截不到短信的,这是因为小米对短信的处置权优先分给了系统。我们可以在短信的【设置】→【高级设置】→【系统短信优先】中发现短信的优先处理权默认是分给系统的,只要关闭这个系统优先权,短信监听应用就可以正常的拦截到短信了。