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

来源:互联网 发布:php 获取useragent 编辑:程序博客网 时间:2024/05/14 23:52

这里写图片描述

短信拦截器

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

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

    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">            <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

原创粉丝点击