【问题标题】:How Can i INTERCEPT an Incoming SMS With A specific Text我如何拦截带有特定文本的传入短信
【发布时间】:2011-08-08 08:40:47
【问题描述】:

我想知道如何拦截特定关键字 EX:“Hi”的传入短信,以便我可以读取包含“Hi”的短信并在阅读完消息后将其删除,如果该消息没有t 包含任何此类文本,则不会将其删除,而是保存在收件箱中。伙计们请帮助我,我发现执行此功能非常困难。

【问题讨论】:

    标签: android


    【解决方案1】:

    寻找广播接收器,这取决于手机上安装的应用程序,但您可以为您的应用程序提供收听消息的优先级。虽然,当显示通知时,消息不会在 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>
    

    最后,确保你在manifest中有RECEIVE_SMS的权限,希望对你有帮助!

    【讨论】:

    • 使用此方法,短信不会保存在短信收件箱中。如何将其保存在短信收件箱中?
    • @Siddharth 要让 SMS 继续,只需省略 abortBroadcast() 行。
    • @Christoper Gwilliams Google Play 商店的 Google 管理员认为 RECEIVE_SMS 权限很危险。因此,包含该权限的应用程序将被拒绝。然后,开发人员必须向 Google Play 管理员提交表单以供批准。其他开发人员提到这个过程很糟糕,反馈需要数周时间,只收到一般性的反馈,而且经常收到直接拒绝而没有任何解释。关于如何避免的任何想法?
    【解决方案2】:

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

    自 Android 版本 4.4 起,如果您的应用不是默认的消息应用,您将无法执行接受答案中承诺的那些事情。您既不能阻止默认消息应用程序收到通知,也不能删除短信。

    【讨论】:

    • 我已经清除了 cmets 并对答案进行了编辑。如果您不同意我的编辑,请随时回滚。但是,如果您选择这样做,请务必明确说明您的答案如何回答被问到的问题,而不依赖于当前接受的答案。
    • 谢谢。没事。只要人们能快速看到它,我就可以。
    猜你喜欢
    • 2011-03-18
    • 1970-01-01
    • 2014-03-14
    • 2012-01-30
    • 2011-11-24
    • 2012-01-29
    • 2022-11-21
    • 1970-01-01
    相关资源
    最近更新 更多