如何使用特定文本拦截传入的SMS

时间:2011-08-08 08:40:48

标签: android

我想知道拦截一个特定关键字EX的传入短信:“嗨”,这样我就可以读到包含“Hi”的短信&阅读msg后删除它,&如果该msg不包含任何此类文本,则不会将其删除,而是保存在收件箱中。伙计们,请帮助我,我发现很难执行此功能。

2 个答案:

答案 0 :(得分:58)

查找广播接收器,这取决于手机上安装的应用程序,但您可以优先使用应用程序来收听消息。虽然,当显示通知时,该消息将不在SMS数据库中,因此您需要使用abortBroadcast()来阻止其他应用程序被通知。见下面的例子:

public class MessageReceiver extends BroadcastReceiver {
    public void onReceive(Context context, Intent intent) {
             Bundle pudsBundle = intent.getExtras();
             Object[] pdus = (Object[]) pudsBundle.get("pdus");
             SmsMessage messages =SmsMessage.createFromPdu((byte[]) pdus[0]);    
             Log.i(TAG,  messages.getMessageBody());
                 if(messages.getMessageBody().contains("Hi")) {
                     abortBroadcast();
                 }
    }

你需要在清单中声明接收器,如下所示:

 <receiver android:name="com.encima.smsreceiver.MessageReceiver" android:exported="true">
    <intent-filter android:priority="999">
        <action android:name="android.provider.Telephony.SMS_RECEIVED"></action>
    </intent-filter>
 </receiver>

最后,确保你在清单中拥有RECEIVE_SMS的权限,希望有所帮助!

答案 1 :(得分:3)

从Android 4.4开始,你在问题中要做的事情是不可能的

自Android 4.4版以来,如果您的应用不是默认的消息应用,您将无法执行接受答案中承诺的内容。您既不能阻止默认消息传递应用程序收到通知,也不能删除短信。