需求
当收到指定号码的短信或包含指定内容的短息后,予以过滤,系统短信应用不会收到这条短信。
思路
写一个广播接收者,设置action为收到短息的广播,并且设置其接收的优先度高于系统短信应用。对收到的短信判断,符合条件的进行过滤
步骤
写一个广播接收者
public class MsgReceiver extends BroadcastReceiver {
private static String QINGDI = "1384848";
@Override
public void onReceive(Context context, Intent intent) {
//短信时通过bundle存放的,所以要通过bundle取出来
Bundle bundle = intent.getExtras();
Object[] objs = (Object[]) bundle.get("pdus");//数组中每一个元素,就是一条短信的字节
System.out.println("*******************************收到短信了!");
for (int i = 0; i < objs.length; i++){
//将短信字节转换成短信对象
SmsMessage sms = SmsMessage.createFromPdu((byte[]) objs[i]);
//获取对方号码
String address = sms.getOriginatingAddress();
//获取短信内容
String content = sms.getMessageBody();
System.out.println(address+":"+content);
if (QINGDI.equals(address)){
abortBroadcast();//拦截短信
System.out.println("信息已拦截!");
}
}
}
}
注册广播接收者
<receiver android:name=".MsgReceiver" >
<intent-filter android:priority="1000">
<action android:name="android.provider.Telephony.SMS_RECEIVED"/>
</intent-filter>
</receiver>
申请权限
<uses-permission android:name="android.permission.RECEIVE_SMS" />
结果
06-07 01:10:34.583 2228-2228/? I/System.out: *******************************收到短信了!
06-07 01:10:34.587 2228-2228/? I/System.out: 1384848:晚上有空吗
06-07 01:10:34.587 2228-2228/? I/System.out: 信息已拦截!