H D
H D

Reputation: 77

Android: Receive SMS

I am pretty new to Android.

I want to trigger some code whenever an SMS is received. The following code works, but I am unable to understand how it is working:

package net.learn2develop.SMSMessaging;

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

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 = "";            
        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 += "SMS from " + msgs[i].getOriginatingAddress();                     
                str += " :";
                str += msgs[i].getMessageBody().toString();
                str += "\n";        
            }
            //---display the new SMS message---
            Toast.makeText(context, str, Toast.LENGTH_SHORT).show();
        }                         
    }
}

Upvotes: 1

Views: 233

Answers (1)

Chintan Desai
Chintan Desai

Reputation: 2707

bundle.get("pdus"); in this 'pdus' means protocol data unit which is the industry format for an SMS message. because SMSMessage reads/writes them you shouldn’t need to disect them.

  • A large message might be broken into many, which is why it is an array of objects.. first it gets all the sms from your inbox and store it one by one in msgs object
  • createFromPdu we need to write this line because every sms may or may not be from same sender.
  • getDisplayOriginatingAddress()Returns the originating address bbut this is deprecated.

  • getMessageBody() gives you the content of the message i hope this gives you the idea of code working

    I hope you find what you are looking for.

Upvotes: 3

Related Questions