2012-05-03 73 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到达时拦截” –