0

我想在发送之前阅读用户在我的应用程序中发送的短信。有没有办法做到这一点?

4

3 回答 3

2

这是不可能的。任何应用程序都可以SmsManager用来发送 SMS,并且此类消息不能被截获,除非可能通过自定义固件。

于 2012-05-03T15:14:12.730 回答
0

您无法阻止发送的短信。您只能在发送后才能了解它。当短信到达已发送框时,您可以通过为短信注册内容观察者来做到这一点。

于 2012-05-03T15:17:48.970 回答
0

如果需要,您可以拦截传入的消息。

这是一个 SMS 拦截器的示例,如果它包含一些自定义定义的数据,它会“取消”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(中止广播) 。

于 2012-05-03T15:21:06.350 回答