您的位置:首页 > 移动开发 > Android开发

Android BroadcastReceiver之短信拦截(黑名单)

2017-08-04 18:28 246 查看


短信拦截器

系统收到短信时会产生一条广播,广播中包含了短信的号码和内容

定义广播接收者接收短信广播

public void onReceive(Context context, Intent intent) {
//拿到广播里携带的短信内容
Bundle bundle = intent.getExtras();
Object[] objects = (Object[]) bundle.get("pdus");
for(Object ob : objects ){
//通过object对象创建一个短信对象
SmsMessage sms = SmsMessage.createFromPdu((byte[])ob);
System.out.println(sms.getMessageBody());
System.out.println(sms.getOriginatingAddress());
}


}

系统创建广播时,把短信存放到一个数组,然后把数据以pdus为key存入bundle,再把bundle存入intent

清单文件中配置广播接收者接收的广播类型,注意要设置优先级属性,要保证优先级高于短信应用,才可以实现拦截

<receiver android:name="com.itheima.smslistener.SmsReceiver">
<intent-filter android:priority="1000">
<action android:name="android.provider.Telephony.SMS_RECEIVED"/>
</intent-filter>
</receiver>


添加权限

<uses-permission android:name="android.permission.RECEIVE_SMS"/>


4.0之后,广播接收者所在的应用必须启动过一次,才能生效

4.0之后,如果广播接收者所在应用被用户手动关闭了,那么再也不会启动了,直到用户再次手动启动该应用

短信拦截器

* 设置广播接收者的优先级,大于系统短信应用,先一步收到短信广播,然后拦截广播,短信应用收不到广播,用户就看不到短信了

* 4.0之后,进程需要启动过一次,广播接收者才能生效

* 4.0之后,用户手动停止进程,那么广播接收者再也不会启动了,直到用户下一次手动启动进程

<receiver android:name="com.cy.smslanjie.SmsReceiver">
4000
<intent-filter android:priority="1000">
<action android:name="android.provider.Telephony.SMS_RECEIVED"/>
</intent-filter>
</receiver>


public class SmsReceiver extends BroadcastReceiver {

@Override
public void onReceive(Context context, Intent intent) {
//取出短信内容
Bundle bundle = intent.getExtras();
//数组中的每一个元素,就是一条短信
Object[] objects = (Object[]) bundle.get("pdus");

for (Object object : objects) {
//把数组中的元素转换成短信对象
SmsMessage sms = SmsMessage.createFromPdu((byte[]) object);
//获取对方号码
String address = sms.getOriginatingAddress();
//获取短信内容
String body = sms.getMessageBody();

System.out.println(address + ";" + body);

if("13888".equals(address)){
//拦截短信
abortBroadcast();
}
}

}

}


参考:Android BroadcastReceiver
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: