Search code examples
broadcastreceiver

How do i setup BroadcastReceiver to only display sms received from specific numbers?


I need help modifying a broadcastReceiver I wrote so that it only displays incoming sms message from numbers that I can specify. right now the following code displays ALL received sms, it would be nice if the app only displayed sms from 1 specific number. can anyone provide any specifics on how I could accomplish this?

code is as follows:

public class IncomingSms extends BroadcastReceiver {

   final SmsManager sms = SmsManager.getDefault();

   public void onReceive(Context context, Intent intent) {

      // Retrieves a map of extended data from the intent.
      final Bundle bundle = intent.getExtras();

      try {

          if (bundle != null) {

              final Object[] pdusObj = (Object[]) bundle.get("pdus");

              for (int i = 0; i < pdusObj.length; i++) {

                  SmsMessage currentMessage = SmsMessage.createFromPdu((byte[]) pdusObj[i]);
                  String phoneNumber = currentMessage.getDisplayOriginatingAddress();

                  String senderNum = phoneNumber;
                  String message = currentMessage.getDisplayMessageBody();

                  Log.i("SmsReceiver", "senderNum: "+ senderNum + "; message: " + message);


                 // Show Alert
                  int duration = Toast.LENGTH_LONG;
                  Toast toast = Toast.makeText(context, 
                             "senderNum: "+ senderNum + ", message: " + message, duration);
                  toast.show();

              } // end for loop
            } // bundle is null

    } catch (Exception e) {
        Log.e("SmsReceiver", "Exception smsReceiver" +e);

    }
  }    
}

thanks a bunch for any help guys.


Solution

  • Just put one if there :)

    public class IncomingSms extends BroadcastReceiver {
       private static final String MY_PHONE_NUMBER = "your number here";
       final SmsManager sms = SmsManager.getDefault();
    
       public void onReceive(Context context, Intent intent) {
    
          // Retrieves a map of extended data from the intent.
          final Bundle bundle = intent.getExtras();
    
          try {
    
              if (bundle != null) {
    
                  final Object[] pdusObj = (Object[]) bundle.get("pdus");
    
                  for (int i = 0; i < pdusObj.length; i++) {
                      SmsMessage currentMessage = SmsMessage.createFromPdu((byte[]) pdusObj[i]);
                      String phoneNumber = currentMessage.getDisplayOriginatingAddress();
    
                      if(!MY_PHONE_NUMBER.equals(phoneNumber)) {
                          return;
                      }
    
                      ...