一、短信竅聽器
首先:訂閱感興趣的廣播 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 ,只要記住是這麼用的就可以了!
然後就是在 AndroidManifest.xml 文件中的 <application> 節點裡加入如下代碼,
注冊
- <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!你可以貼代碼試試效果!!