天天看點

Android系統開發:短信的号碼攔截

Android系統開發:短信的号碼攔截

Code:Android源碼

功能要求:針對某号碼,短信的接收與發送的監聽與攔截。

裝置對該号碼發送短信的攔截

實作思路 : 應用發送短信(無論是否是預設短信),在它将該條資料寫入/sms/sent/資料庫中前,檢查是否是我們需要攔截的号碼 ,如果是 則return操作, 那麼就可以實作對于發送短信的攔截。

Path: frameworks/opt/telephony/src/java/com/android/internal/telephony/SMSDispatcher.java

1)找到内部類 Smstracker

2)修改以下代碼

void writeSentMessage(Context context, int phoneId) {
             String text = (String) mData.get("text");
+            if (mDestAddress != null) {
+                if (mDestAddress.equals(“110”) || mDestAddress.equals("112")) {
+                Log.d(TAG,"This SMS does not enter the database");
+                return;
+                }
+            }
        ...
       }
        public void updateSentMessageStatus(Context context, int status) {
+            if (mDestAddress != null) {
+                if (mDestAddress.equals(“110”) || mDestAddress.equals("112")) {
+                Log.d(TAG,"This SMS does not enter the database");
+                return;
+                }
+            }
            ...
       }
       void writeSentMessage(Context context) {
+            if (mDestAddress != null) {
+                if (mDestAddress.equals(“110”) || mDestAddress.equals("112")) {
+                Log.d(TAG,"This SMS does not enter the database");
+                return;
+                }
+            }
       ...
       }
           

裝置接收短信的攔截

實作思路:在接受到短信之後,将該短信不做任何處理即可,那麼我們隻要找到接收短信後處理短信的方法,在該方法裡對收到的短信号碼做出攔截處理就可以了,當然你也可以做一些其他的操作。

Path:packages/apps/Mms/src/com/android/mms/transaction/SmsReceiverService.java

1)找到方法handleSmsReceived

2)修改以下代碼

private void handleSmsReceived(Intent intent, int error) {
    SmsMessage[] msgs = Intents.getMessagesFromIntent(intent);
+ 	SmsMessage tempsms = msgs[0];
+	if (tempsms.getOriginatingAddress() != null && !"".equals(tempsms.getOriginatingAddress())){
+	    if (tempsms.getOriginatingAddress().equals("110")) {
+		         Log.d(TAG, "This message is not processed");
+                return;
+            }
+	}
   ...
   }
           

其實實作的方式有很多 ,Android系統十分的複雜,是以解決問題的方法和思路需要更加直接、更加簡單一點,要不然很容易陷入整個代碼海裡無法自拔。