通过BroadcastReceiver拦截短信
2011-08-25 11:49
120 查看
AndroidOS 当android系统接收到短信时,会发送一个广播BroadcastReceiver,这个广播是以有序广播的形式发送的。 所谓的有序广播就是广播发出后,接收者是按照设置的优先级一个一个接着接收,前面的接收者可以选择是否终止这条广播以使后面的接收者接收不到,而普遍广播发送后所有的接收者都能同时接到,但是不能终止这条广播,也不能将它的处理结果传递给下个接收者。 今天实现的sms拦截就是通过实现一个BroadcastReceiver并将其的优先级设置的比系统sms接收者高。 首先实现一个BroadcastReceiver Java代码 package sy.android.interceptsms; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.os.Bundle; import android.telephony.SmsMessage; import android.util.Log; public class SMSReceive extends BroadcastReceiver { static final String TAG="SMSReceive"; static final String smsuri="android.provider.Telephony.SMS_RECEIVED"; @Override public void onReceive(Context arg0, Intent arg1) { if(arg1.getAction().equals(smsuri)){ Bundle bundle= arg1.getExtras(); if(null!=bundle){ Object[] pdus = (Object[])bundle.get("pdus"); SmsMessage[] smg = new SmsMessage[pdus.length]; for(int i=0; i<pdus.length;i++){ smg[i]=SmsMessage.createFromPdu((byte[])pdus[i]); Log.i(TAG+"smg"+i,smg[i].toString()); } for(SmsMessage cursmg:smg){ String codeStr=cursmg.getDisplayMessageBody(); String codeStr2=cursmg.getDisplayOriginatingAddress(); String codeStr3=cursmg.getMessageBody(); String codeStr6=cursmg.getOriginatingAddress(); Log.i(TAG+"codeStr",codeStr); Log.i(TAG+"codeStr2",codeStr2); Log.i(TAG+"codeStr3",codeStr3); (TAG+"codeStr5",codeStr5); Log.i(TAG+"codeStr6",codeStr6); } abortBroadcast(); //终止此条广播 } } } } package sy.android.interceptsms; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.os.Bundle; import android.telephony.SmsMessage; import android.util.Log; public class SMSReceive extends BroadcastReceiver { static final String TAG="SMSReceive"; static final String smsuri="android.provider.Telephony.SMS_RECEIVED"; @Override public void onReceive(Context arg0, Intent arg1) { if(arg1.getAction().equals(smsuri)){ Bundle bundle= arg1.getExtras(); if(null!=bundle){ Object[] pdus = (Object[])bundle.get("pdus"); SmsMessage[] smg = new SmsMessage[pdus.length]; for(int i=0; i<pdus.length;i++){ smg[i]=SmsMessage.createFromPdu((byte[])pdus[i]); Log.i(TAG+"smg"+i,smg[i].toString()); } for(SmsMessage cursmg:smg){ String codeStr=cursmg.getDisplayMessageBody(); String codeStr2=cursmg.getDisplayOriginatingAddress(); String codeStr3=cursmg.getMessageBody(); String codeStr6=cursmg.getOriginatingAddress(); Log.i(TAG+"codeStr",codeStr); Log.i(TAG+"codeStr2",codeStr2); Log.i(TAG+"codeStr3",codeStr3); (TAG+"codeStr5",codeStr5); Log.i(TAG+"codeStr6",codeStr6); } abortBroadcast(); //终止此条广播 } } } } 然后,我们还要注册它,android:priority就是设置优先级的。 Xml代码 <receiver android:name="SMSReceive"> <intent-filter android:priority="100"> <action android:name="android.provider.Telephony.SMS_RECEIVED" /> </intent-filter> </receiver> <receiver android:name="SMSReceive"> <intent-filter android:priority="100"> <action android:name="android.provider.Telephony.SMS_RECEIVED" /> </intent-filter> </receiver> 此为,不要忘了添加接收sms的权限 Xml代码 <uses-permission android:name="android.permission.RECEIVE_SMS"></uses-permission> <uses-permission android:name="android.permission.RECEIVE_SMS"></uses-permission> 好了,短信拦截就实现了,如果想实现短信黑名单,只需要代码中获取到的号码和已设置的号码匹配然后做相关操作就可以了。
相关文章推荐
- android通过BroadcastReceiver拦截短信转发
- 在通过android的广播机制拦截短信的实现过程中遇到的问题
- 通过BroadcastReceiver拦截短信
- 安卓短信拦截通过广播接收
- 通过asp.net 短信猫发短信
- Android——BroadcastReceiver 广播 短信拦截
- IOS 5 拦截手机短信(需越狱)
- Android之——拦截短信
- 通过串口发送手机短信(C#版)
- 短信拦截
- Android ContentObserver ---拦截短信并删除
- Android--短信窃听器及黑名单拦截
- 实现pc端通过usb获取到android手机上的短信、通讯录等信息
- MVC使用ASP.NET Identity 2.0实现用户身份安全相关功能,比如通过短信或邮件发送安全码,账户锁定等
- 通过串口和AT指令来发送短信
- 通过短信发送LOG归类号码发送情况的shell脚本
- 短信拦截,如何抢先于QQ通讯录,360
- 通过中间人攻击的方法拦截传输在https上的加密信息
- Spring MVC AOP通过自定义注解方式拦截Controller等实现日志管理
- 关于Android短信拦截