android 短信拦截并删除

在Android开发中,实现短信的拦截和删除功能面临诸多挑战。4.4及以上版本系统只能设置一个默认的SMS应用,非默认应用无法直接拦截短信,但可以删除短信,前提是获取到动态发送短信的权限。自3.1版起,新安装或被停止的APP无法接收广播,除非使用FLAG_INCLUDE_STOPPED_PACKAGES。测试显示不同设备的兼容性问题,如锤子4.4系统能接收,而酷派4.1系统则不能。

目前在做短信拦截并删除,遇到了各种坑,但同时说明了安卓系统越来越安全了,很赞!
拦截短信:
目前4.4版本以上的系统是不可能拦截到了,原因:
4.4及其以后系统,只能设置一个默认的SMS短信app,但短信到达,首先会通知这个app,并且只有这个app有对短信数据库的修改权限和短信的发送权限,并且短信广播不再是有序广播,也就是App没有办法拦截这个广播,所有app都快接收到短信到达的广播通知,但是只有默认SMS短信app可以修改短信记录(但是!不排除有些操作系统修改这个机制!)解决方法:需要用户授权应用为default sms(你觉得用户会这么做吗?)

删除短信:
短信删除是可以随便删的,但是需要用户动态给予发短信权限

监听短信:
如果是静态注册来监听系统广播,按理来说程序关闭时也可以接收到广播。但是不行,原因:
自Android 3.1之后, 所有新安装但未被执行过的apk, 以及那些被用户强行停止的apk, 都会处于stopped状态.这个状态下, apk中的广播接收器, 均处于未激活状态, 无法履行监听功能。但是自己写的广播,允许应用和后台服务通过给广播intent设置FLAG_INCLUDE_STOPPED_PACKAGES来唤醒处于“stopped state”的程序,但是系统自带的广播intent,由于不能修改,就只能接受这个现实了。

测试:
注册静态接收系统短信的广播:锤子手机4.4的系统,能收到短信广播。酷派4.1的系统,接受不到短信广播。(o O 系统发的短信广播,竟然被别的应用给拦截了。。。)

常用代码:
需要的权限:

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

静态注册广播

<receiver android:name=".SmsReceiver">
     <intent-filter>
           <action android:name="android.provider.Telephony.SMS_RECEIVED"/>
      </intent-filter>
</receiver>

监听短信并删除

public class SmsReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
         Object[] pduses = (Object[]) intent.getExtras().get("pdus");
        for (Object puds:pduses){
            //获取短信
            byte[] pdusmessage = (byte[]) puds;
            SmsMessage sms = SmsMessage.createFromPdu(pdusmessage);
            String mobile = sms.getOriginatingAddress();
            String content = sms.getMessageBody(); 
            Date date = new Date(sms.getTimestampMillis());
            SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
            String time = format.format(date);  
            //根据号码删除短信
            int res = context.getContentResolver().delete(Uri.parse("content://sms"), "address like '" + mobile + "'", null);
        }

    }
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值