一、短信窍听器
首先:订阅感兴趣的广播 Intent ,订阅方法有两种:
第一种:使用代码进行订阅
- IntentFilter filter = new IntentFilter("Android.provider.Telephony.SMS_RECEIVED");
- IncomingSMSReceiver receiver = new IncomingSMSReceiver();
- registerReceiver(receiver, filter);
第二种:在 AndroidManifest.xml 文件中的 <application> 节点里进行订阅 :
- <receiver android:name=".IncomingSMSReceiver">
- <intent-filter>
- <action android:name="android.provider.Telephony.SMS_RECEIVED"/>
- </intent-filter>
- </receiver>
咱用第二种:
在android下,要想接受广播信息,那么这个广播接收器就得我们自己来实现了,我们可以继承BroadcastReceiver,就可以有一个广播接受器了。有个接受器还不够,我们还得重写BroadcastReceiver里面的onReceiver方法,当来广播的时候我们要干什么,这就要我们自己来实现!!
- public class MySMSListener extends BroadcastReceiver {
- public void onReceive(Context arg0, Intent intent) {
- Bundle bundle=intent.getExtras();
- Object[] pdus=(Object[])bundle.get("pdus");
- if(pdus!=null&&pdus.length>0){
- SmsMessage[] messages=new SmsMessage[pdus.length];
- for(int i=0;i<messages.length;i++){
- byte[] pdu=(byte[]) pdus[i];
- messages[i]=SmsMessage.createFromPdu(pdu);
- }
- for(SmsMessage msg:messages){
- String content=msg.getMessageBody();
- String sender=msg.getOriginatingAddress();
- Date date=new Date(msg.getTimestampMillis());
- SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
- String sendTime=sdf.format(date);
- if(sender!=null&& sender.endsWith("5556")){
- System.out.println("5556");
- SmsManager smsManager=SmsManager.getDefault();
- smsManager.sendTextMessage("5556", null, "go to !!", null, null);
- this.abortBroadcast();//终止广播
- }
- }
- }
- }
- }
这里需要启动两个模拟器!!
if语句判断是不是5556来的短信,如果是,终止广播,不让5556发短信到5554,并给5556发一个短信,内容为“go to!!";
在这里 , 不用理解到底什么是 pdus ,只要记住是这么用的就可以了!
- <receiver android:name="MySMSListener"
- >
- <intent-filter android:priority="1000">
- <action android:name="android.provider.Telephony.SMS_RECEIVED"/>
- </intent-filter>
- </receiver>
这个priority是定义权限,值是-1000~1000;
还要加上权限申请:
- <uses-permission android:name="android.permission.RECEIVE_SMS"/>
ok!你可以贴代码试试效果!!