Android 如何截获带有特定文本的传入短信

Android 如何截获带有特定文本的传入短信,android,Android,我想知道如何截获一条特定关键字的短信,例如:“Hi”,这样我就可以阅读包含“Hi”的短信,并在阅读信息后将其删除,如果该信息不包含任何此类文本,则不会将其删除,而是保存在收件箱中。伙计们,请帮帮我,我发现执行此功能非常困难。查找广播接收器,这取决于手机上安装的应用程序,但您可以为您的应用程序设置收听消息的优先级。尽管如此,当显示通知时,该消息还不会出现在SMS数据库中,因此您需要使用abortBroadcast()停止通知其他应用程序。见下例: public class MessageRecei

我想知道如何截获一条特定关键字的短信,例如:“Hi”,这样我就可以阅读包含“Hi”的短信,并在阅读信息后将其删除,如果该信息不包含任何此类文本,则不会将其删除,而是保存在收件箱中。伙计们,请帮帮我,我发现执行此功能非常困难。

查找广播接收器,这取决于手机上安装的应用程序,但您可以为您的应用程序设置收听消息的优先级。尽管如此,当显示通知时,该消息还不会出现在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>

最后,确保您有权在清单中接收_短信,希望对您有所帮助

从Android 4.4开始,你在问题中要求做什么是不可能的
自Android版本4.4以来,如果您的应用程序不是默认的消息传递应用程序,您将无法执行公认答案中承诺的内容。您既不能停止接收通知的默认消息应用程序,也不能删除短信

使用此方法,SMS不会保存在SMS收件箱中。如何在SMS收件箱中保存它?@ SIDDHARTH让SMS继续,只是省略了ABORT广播()行。@谷歌RealStore的谷歌管理员GRWISS认为接收方SMS许可是危险的。因此,包含该权限的应用程序将被拒绝。然后开发者必须向Google Play管理员提交一份表单以供批准。其他开发人员提到这个过程非常糟糕,反馈需要几周的时间,只收到一般性的反馈,而且通常会收到没有任何解释的直接拒绝。有什么想法可以避免吗?我已经清除了评论并对答案进行了编辑。如果您不同意我的编辑,请随意回滚。但是,如果您选择这样做,请确保在不依赖当前已接受答案的情况下,清楚说明您的答案是如何回答问题的。谢谢。很好。只要人们能很快看到,我就没事。