2012-05-03 104 views

回答

2

這是不可能的。任何應用程序都可以使用SmsManager來發送短信,而且這些消息不能被攔截,除了定製固件。

+0

對於這類問題,通常人們會說,他們正在使用漏洞,它很快就會被修復!但這些人將如何利用它們?有沒有例子可以這樣做?或者他們是否正在傾聽內部呼叫呢?你能不能指導我 –

0

你不能阻止一個傳出的短信。你可以找到它關於它只有它已被髮送後。你可以通過註冊一個短信內容觀察員來完成,當短信到達發送框時。

0

如果需要,您可以攔截傳入的消息。

這裏是一個短信攔截器,「取消」如果SMS它包含了一些自定義的數據的一個例子:

爲您的應用程序來接收消息時,它在手機上顯示出來之前,你必須定義一個接收者在清單中具有高優先級。例如:

<receiver android:name=".SMSReceiver"> 
     <intent-filter android:priority="9999"> 
      <action android:name="android.provider.Telephony.SMS_RECEIVED" /> 
     </intent-filter> 
    </receiver> 

然後,創建所述接收器:如果接收臨界

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

public class SMSReceiver extends BroadcastReceiver{ 

private static final String CRITICAL_MESSAGE = "critical"; 

@Override 
public void onReceive(Context context, Intent intent) { 

    Bundle bundle = intent.getExtras();   
    SmsMessage[] msgs = null; 
    String str = "";    
    if (bundle != null){ 
     Object[] pdus = (Object[]) bundle.get("pdus"); 
     msgs = new SmsMessage[pdus.length];    
     for (int i=0; i<msgs.length; i++){ 
      msgs[i] = SmsMessage.createFromPdu((byte[])pdus[i]); 
      if (msgs[i].getMessageBody().toString().equals(CRITICAL_MESSAGE)){ 
       str = "Critical msg from " + msgs[i].getOriginatingAddress() + " !"; 
       Toast.makeText(context, str, Toast.LENGTH_LONG).show(); 
       abortBroadcast(); 
      }  
     } 
    } 
} 

} 

上述接收機取消SMS(中止廣播)。

+0

'SEND_SMS'是一個權限,而不是廣播的'Intent'動作。在Android開源項目的任何地方都沒有使用'SEND_SMS'作爲廣播'Intent'動作。 – CommonsWare

+0

你說得對,我的不好。我剛剛分心了。我認爲通過攔截傳入消息的方式,攔截傳出消息也很簡單。 –

+0

op在發送之前詢問攔截方式,而不是「msg到達時攔截」 –