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

android 短信拦截并删除

2016-05-09 10:37 435 查看
目前在做短信拦截并删除,遇到了各种坑,但同时说明了安卓系统越来越安全了,很赞!

拦截短信:

目前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);
}

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