【问题标题】:Checking SMS for Multiple Keywords in Android在 Android 中检查多个关键字的 SMS
【发布时间】:2014-08-12 15:13:17
【问题描述】:

只是想知道我是否可以就下一步如何处理我的应用程序获得一些建议,目前我有一个名为:MySMSReceiver.java 的类,它可以检查传入的 SMS 是否具有特定的关键字放置在传入的短信中。只需单独检查一个单词“Locate”就可以正常工作,但是,我似乎可以弄清楚如何在收到的消息中检查 3 个不同的关键字。

以下是我目前用于 MySMReceiver.java

的代码
package com.example.myautosms;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.telephony.SmsMessage;
import android.widget.Toast;

public class MySMSReceiver extends BroadcastReceiver {


    private String[] keyword = {"Locate", "Lock", "Unlock"};

    public void onReceive(Context context, Intent intent) {

        Object[] pdus = (Object[])intent.getExtras().get("pdus");
        SmsMessage shortMessage = SmsMessage.createFromPdu((byte[])pdus[0]);
        if(shortMessage.getDisplayMessageBody().equals(keyword)) {
            Toast.makeText(context, keyword.toString(), Toast.LENGTH_LONG).show();
        } else {
            Toast.makeText(context, keyword.to, Toast.LENGTH_LONG).show();
        }
    }
}

欢迎提出任何建议! :)

【问题讨论】:

    标签: java android sms smsmanager


    【解决方案1】:

    我假设您需要 3 个关键字中的任何一个。

    只需检查所有 3 个关键字:

    if(shortMessage.getDisplayMessageBody().equals(keyword[0]) ||
       shortMessage.getDisplayMessageBody().equals(keyword[1]) ||
       shortMessage.getDisplayMessageBody().equals(keyword[2]))
    

    或者如果每个关键字有不同的行为:

    if(shortMessage.getDisplayMessageBody().equals(keyword[0])) {
    
    } else if (shortMessage.getDisplayMessageBody().equals(keyword[1])) {
    
    } else if (shortMessage.getDisplayMessageBody().equals(keyword[2])) {
    
    } else {
    
    }
    

    此外,考虑使用不区分大小写的关键字,即使用equalsIgnoreCase

    【讨论】:

    • 您不想在这里使用contains 代替equals 吗?除非消息是关键字,否则它永远不会使用 equals 传递该 if 语句
    • @tyczj 这完全取决于 OP 的要求。 “锁定”的行为应该与“锁定”还是“不锁定”相同?
    【解决方案2】:

    您可以检查短信内容中的多个单词,如下所示:

    String body = shortMessage.getDisplayMessageBody().toLowerCase();
    
    boolean isAvailable = false;
    for(String word : keyword)
        if(body.contains(word.toLowerCase()))
            isAvailable = true;
    
    //do whatever with 'isAvailable'
    

    【讨论】:

      猜你喜欢
      • 2013-09-21
      • 2018-12-24
      • 1970-01-01
      • 1970-01-01
      • 2013-02-15
      • 2011-12-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多