原理:
1.收到短信的时候,会启动短信的广播,短信广播里面包含短信的号码和内容,拿到短信的广播,检测短信里面包含的内容是不是黑名单的内容,本质就是广播接收者.
2.系统发送短信广播的时候,是怎么存的就怎么样取出来,如果短信过长,那么会拆分成多条短信发送,那么发送的短信广播中会有多条短信。
3.android4.0以后,广播接收者所在的进程从来没有被启动过,那么广播接收者是不会生效的,即使广播接收者所在的进程被关闭,还是会生效(仅限系统关闭,如果被用户或者因为内存原因是不会被启动,手动关闭是指在应用管理器里面for stop来关闭).android4.0之前,如果是系统关闭广播接收者所在进程,当系统发出的广播中的action跟该广播接收者的action匹配的时候,系统会启动该广播接收者所在的进程,并把广播发给该广播接收者所在的进程,但是如果用户手动关闭该进程,该进程进入冻结状态再也不会被启动,直到用户下一次手动启动该进程。
关键代码:
(1)Object[] pdus = (Object[])intent.getExtras().get("pdus");获得短信数据(2)byte[] pdu = (byte[])pdus[0];(3)SmsMessage message = SmsMessage.createFromPdu(pdu);将字节数组封装为SmsMessage(4)String content = message.getMessageBody();获得短信内容(5)String date = new Date(message.getTimestampMillis()).toLocaleString();获得短信时间(6)String senderNumber = message.getOriginatingAddress();获得发送方号码(7)abortBroadcast(); //阻止其他的广播接收者收到广播,广播终止
权限配置:
<uses-permission android:name="android.permission.RECEIVE_SMS"/>清单文件配置:
<receiver android:mame="com.ldw.smslanjie.smsReceiver"> <intent-filter android:PRiority="1000"> //设置优先级 <action android:name="android.provider.Telephony.SMS_RECEIVED"/> </intent-filter> </receiver>短信防火墙代码:
smsReceiver.java
package com.ldw.smslanjie;import android.content.BroadcastReceiver;import android.content.Context;import android.content.Intent;import android.os.Bundle;import android.telephony.SmsManager;import android.telephony.SmsMessage;public class smsReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { // TODO Auto-generated method stub //拿到短信的信息 //短信的内容封装在intent中 Bundle bundle = intent.getExtras(); //以pdus为键去除一个object数组,数组中的每一个元素,都是一个短信 Object[] objects = (Object[]) bundle.get("pdus"); //获取广播中的短信内容 for(Object object : objects){ //通过pdu构造短信 SmsMessage sms = SmsMessage.createFromPdu((byte[]) object); if(sms.getOriginatingAddress().equals("21312")){ //阻止其他的广播接收者收到广播,广播终止 abortBroadcast(); //发送一条默认的信息 SmsManager.getDefault().sendTextMessage(sms.getOriginatingAddress(), null, "再见", null, null); } System.out.println(sms.getOriginatingAddress()); System.out.println(sms.getMessageBody()); } }}
新闻热点
疑难解答