隨筆-348  評(píng)論-598  文章-0  trackbacks-0
          經(jīng)過測試,Android中是可以攔截短信的,解決方案如下:
          package com.tigertian.sms;

          import android.content.BroadcastReceiver;
          import android.content.Context;
          import android.content.Intent;
          import android.os.Bundle;
          import android.telephony.SmsMessage;

          public class SMSReceiver extends BroadcastReceiver {

              @Override
              
          public void onReceive(Context context, Intent intent) {
                  
          // TODO Auto-generated method stub
                  System.out.println("SMSReceiver, isOrderedBroadcast()="
                          
          + isOrderedBroadcast());
                  
                  Bundle bundle 
          = intent.getExtras();
                  Object messages[] 
          = (Object[]) bundle.get("pdus");
                  SmsMessage smsMessage[] 
          = new SmsMessage[messages.length];
                  
          for (int n = 0; n < messages.length; n++) {
                      smsMessage[n] 
          = SmsMessage.createFromPdu((byte[]) messages[n]);
                      
          if(smsMessage[n].getMessageBody().contains("hahaha")){
                          
          this.abortBroadcast();
                      }
                      System.out.println(smsMessage[n].getOriginatingAddress()
          +" "+smsMessage[n].getMessageBody()+" "+smsMessage[n].getIndexOnIcc());
                  }
              }

          }

                  <receiver android:name=".SMSReceiver">
                      
          <intent-filter android:priority="10000">
                          
          <action android:name="android.provider.Telephony.SMS_RECEIVED"></action>
                          
          <category android:name="android.intent.category.DEFAULT" />
                      
          </intent-filter>
                  
          </receiver>
          上面的代碼是一個(gè)消息監(jiān)聽,監(jiān)聽接收短信的消息。我們可以從控制臺(tái)打印信息里面看到,他是一個(gè)OrderedBroadcast,根據(jù)這一點(diǎn)我們就可以對(duì)短信機(jī)制進(jìn)行攔截。如何攔截呢?

          首先要聲明一個(gè)消息監(jiān)聽器,同時(shí)根據(jù)上面的配置文件需要在AndroidManifest.xml中配置好,注意它的優(yōu)先級(jí)是10000,這一點(diǎn)很關(guān)鍵,因?yàn)镺rderedBroadcast是根據(jù)優(yōu)先級(jí)來傳遞消息的,優(yōu)先級(jí)越高越先獲取到消息,待處理完后才會(huì)傳遞給下一個(gè)監(jiān)聽器,如果當(dāng)前監(jiān)聽器退出廣播,那么后面的所有監(jiān)聽器都將無法收到消息。

          其次我們需要實(shí)現(xiàn)onReceive方法,根據(jù)上面的代碼,我們可以從bundle中拿到短信內(nèi)容并還原成SmsMessage,這樣我們可以根據(jù)特定條件來判斷哪些是需要我們攔截并且不要讓用戶知道的,哪些是我們可以放行的。需要我們攔截的短信,我們可以在收到后直接abortBroadcast()(上面的代碼中是判斷當(dāng)短信內(nèi)容包含hahaha的時(shí)候直接攔截),這樣系統(tǒng)收件箱將無法接收到該條短信,繼而也就不會(huì)有notification去通知用戶。

          至此,應(yīng)用編寫好之后,短信攔截功能就完成了,當(dāng)然基于此還可以做一些其他功能,這方面就看需求了。注意,優(yōu)先級(jí)相同,則根據(jù)包名依次傳遞廣播。

          想刪除收件箱中已存在的短信,請(qǐng)參考Android源碼SmsProvider類,可以在你的應(yīng)用中使用ContentProvider機(jī)制進(jìn)行操作。

          ---------------------------------------------------------
          專注移動(dòng)開發(fā)

          Android, Windows Mobile, iPhone, J2ME, BlackBerry, Symbian
          posted on 2011-01-23 15:52 TiGERTiAN 閱讀(31109) 評(píng)論(12)  編輯  收藏 所屬分類: Android

          評(píng)論:
          # re: Android中短信攔截解決方案[未登錄] 2011-12-27 13:41 | Alex
          你好,我按你的方法不能攔截短信啊。仍然有短信通知。  回復(fù)  更多評(píng)論
            
          # re: Android中短信攔截解決方案[未登錄] 2012-05-26 16:53 | 小羅
          可以比360,安全衛(wèi)士先攔截嗎?或者是否可以不然它們兩個(gè)攔截?  回復(fù)  更多評(píng)論
            
          # re: Android中短信攔截解決方案 2012-06-18 12:08 | 袁良鋒
          但是有些還是無法攔截,比如小米下,短信會(huì)被其系統(tǒng)自帶的短信系統(tǒng)攔截到,有解決方法,求賜教!  回復(fù)  更多評(píng)論
            
          # re: Android中短信攔截解決方案[未登錄] 2013-01-22 19:35 | Jessica
          請(qǐng)問你在小米下短信攔截的問題解決了嗎?請(qǐng)賜教~~~~@袁良鋒
            回復(fù)  更多評(píng)論
            
          # re: Android中短信攔截解決方案 2013-08-07 10:43 | xpiou
          小米的短信設(shè)置里有一個(gè)“系統(tǒng)短信優(yōu)先”的選項(xiàng)  回復(fù)  更多評(píng)論
            
          # re: Android中短信攔截解決方案 2014-02-06 11:37 | draem0507
          @xpiou
          正解
            回復(fù)  更多評(píng)論
            
          # re: Android中短信攔截解決方案 2014-03-04 20:57 | lincoln
          試了,可是沒有用。@xpiou
            回復(fù)  更多評(píng)論
            
          # re: Android中短信攔截解決方案[未登錄] 2014-08-07 15:44 | 默默
          正解~@xpiou
            回復(fù)  更多評(píng)論
            
          # re: Android中短信攔截解決方案 2014-10-13 00:04 | Super169
          @xpiou
          有測試過嗎? 還是小米改了?
          關(guān)閉 "統(tǒng)短信優(yōu)先" 只能令 BroadcastReceiver 可以接收到短訊, 但 abortBroadcast() 依然無效.  回復(fù)  更多評(píng)論
            
          # re: Android中短信攔截解決方案 2014-11-17 19:21 | sfd
          @Alex
          手機(jī)短信攔截,安卓手機(jī)4.4短 信攔截,手機(jī)驗(yàn)證碼攔截 手機(jī)驗(yàn)證碼馬子軟件 手機(jī)信息攔截 支付寶驗(yàn)證碼攔截 信用卡驗(yàn)證碼攔截軟件 免殺全部包過 安卓手機(jī)全部通殺,過360 小米安全小心,QQ管家,百度衛(wèi)士 全部過 攔截成功高有意加扣.1.0.7.2.9.9.8.5.6.6.  回復(fù)  更多評(píng)論
            
          # re: Android中短信攔截解決方案 2014-11-17 19:21 | sfd
          手機(jī)短信攔截,安卓手機(jī)4.4短 信攔截,手機(jī)驗(yàn)證碼攔截 手機(jī)驗(yàn)證碼馬子軟件 手機(jī)信息攔截 支付寶驗(yàn)證碼攔截 信用卡驗(yàn)證碼攔截軟件 免殺全部包過 安卓手機(jī)全部通殺,過360 小米安全小心,QQ管家,百度衛(wèi)士 全部過 攔截成功高有意加扣.1.0.7.2.9.9.8.5.6.6.  回復(fù)  更多評(píng)論
            
          # re: Android中短信攔截解決方案 2014-12-30 20:16 | 求項(xiàng)目
          有玩攔截的,可以加我扣扣2417650900,需要找一個(gè)好軟件,求帶  回復(fù)  更多評(píng)論
            
          主站蜘蛛池模板: 湖口县| 九龙城区| 晋中市| 吉安市| 灌云县| 凉山| 高淳县| 宝鸡市| 海原县| 新郑市| 万山特区| 云霄县| 高淳县| 开化县| 依安县| 饶阳县| 泸水县| 合山市| 达日县| 丹巴县| 鹰潭市| 达尔| 会理县| 鱼台县| 开封县| 临西县| 泸西县| 潜江市| 天祝| 萍乡市| 岚皋县| 新绛县| 贵溪市| 乐山市| 上林县| 万山特区| 梅河口市| 霞浦县| 开化县| 睢宁县| 运城市|