Search code examples
javaandroidsmssmsmanager

Checking SMS for Multiple Keywords in Android


Just wondering if I could get some advice about how next to handle my App, currently I have class called: MySMSReceiver.java, it can check if an incoming SMS has a particular keyword that had been placed in the incoming SMS. It works fine with just checking the one word "Locate" on it's own but, I can seem to figure out how to check say 3 different Keywords on an incoming message.

Below is the code that I'm currently using for the 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();
        }
    }
}

Any suggestions would be welcomed! :)


Solution

  • I'm assuming you require either of the 3 keywords.

    Just check all 3 keywords :

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

    Or if each keyword has different behavior :

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

    In addition, consider using case insensitive keywords, i.e. use equalsIgnoreCase.