java - 无法将收到的短信文本与 Android 中的值进行比较

标签 java android sms

我是编程新手,请多多包涵。在学习了几个教程之后,我制作了一个 SMS 应用程序,我想在收到特定文本时执行特定任务,我通过将收到的文本与我已经声明的值(代码)进行比较来做到这一点。问题是这种情况从未发生过。


public class SmsReceiver extends BroadcastReceiver
{
    @Override
    public void onReceive(Context context, Intent intent) 
    {
        //---get the SMS message passed in---
        Bundle bundle = intent.getExtras();        
        SmsMessage[] msgs = null;
        String str = "";
        String code = "blue";
        String conf = "Ok";
        String inv = "Invalid";


    if (bundle != null)
    {
        //---retrieve the SMS message received---
        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]);                

            str = msgs[i].getMessageBody().toString();
            //n = Integer.parseInt(str);

        }

        if (str == code)
          Toast.makeText(context, conf, Toast.LENGTH_SHORT).show();
         else 
            //str = Integer.toString(n);
            //Toast.makeText(context, str, Toast.LENGTH_SHORT).show();
          Toast.makeText(context, inv, Toast.LENGTH_SHORT).show();


    } 

  }

当我发送消息时,它总是显示 inv 变量(无效)。我试图将“代码”变量更改为整数,然后解析字符串以便进行比较;在这种情况下它确实有效,但每当我收到一条字符串消息时,应用程序就会崩溃。我认为这应该是一件简单的事情,但由于我不完全理解 java,所以我无法弄清楚。 我希望你能为我提供一些关于我能做什么的指导或建议。 提前致谢。

最佳答案

当比较两个字符串时,你应该使用:

if (str.equals(code))

Java 不会像连接时那样覆盖等号运算符来进行字符串相等性测试。

测试 str == code 仅在两个字符串变量都引用内存中完全相同的对象时才计算为真。

关于java - 无法将收到的短信文本与 Android 中的值进行比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4160737/

相关文章:

android - 使用 OpenGl 和触摸屏功能视觉校正旋转

java - 将多个表导出到多个 CSV 文件

java - 使用混淆器时不显示自定义弹出菜单图标

c# - 使用 asp.net C# 通过 GSM 调制解调器发送短信

android - ACTION_SEND 用于发送短信

android - 如何将我的应用设置为默认短信应用?

Java ScriptingManager 访问和使用函数

java - 我可以使用静态 block 中的字段并将其分配给类字段吗?

java - 使用jsp作为服务器端脚本将文件上传到特定文件夹

Java SAX 解析器命名空间抛出 NullPointerException