in Android Broadcast Receivers are used to listen for broadcast Intents. A Broadcast Receiver needs to be registered, either in code or within the application manifest. (in this case is registered in the manifest)
When registering a Broadcast Receiver you must use an Intent Filter to specify which Intents it is listening for.
We use BroadcastReceiver to intercept SMS.
See the code below
import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.os.Bundle; import android.telephony.SmsMessage; import android.widget.Toast; public class SMSBroadcastReceiver extends BroadcastReceiver{ @Override public void onReceive(Context context, Intent intent) { Bundle bundle = intent.getExtras(); SmsMessage[] msgs = null; StringBuilder str = new StringBuilder(); if (bundle != null) { // --- retrieve the received SMS here --- 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.append("SMS from " + msgs[i].getOriginatingAddress()); str.append(" :"); str.append(msgs[i].getMessageBody().toString()); str.append("\n"); } // ...we show sms here... Toast.makeText(context, str.toString(), Toast.LENGTH_SHORT).show(); } } }
As you can see, we extends from BroadcastReceiver and override the method onReceive where we retrieve information about the received SMS.
In the manifest you must define the RECEIVE_SMS uses-permission, register the receiver (our class SMSBroadcastListener) and his intent-filter (SMS_RECEIVED):
They will be started automatically when a matching Intent is broadcast, in practice when received an SMS you will see a Toast with SMS information.