从头学android_短信拦截器

需求


当收到指定号码的短信或包含指定内容的短息后,予以过滤,系统短信应用不会收到这条短信。


思路

写一个广播接收者,设置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: 信息已拦截!


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值