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系統十分的複雜,是以解決問題的方法和思路需要更加直接、更加簡單一點,要不然很容易陷入整個代碼海裡無法自拔。