-4

This is my code of brodcast receiver

 Bundle myBundle = intent.getExtras();
    SmsMessage [] messages = null;
    String strMessage = "";

    if (myBundle != null)
    {
        Object [] pdus = (Object[]) myBundle.get("pdus");
        messages = new SmsMessage[pdus.length];

        for (int i = 0; i < messages.length; i++)
        {
            messages[i] = SmsMessage.createFromPdu((byte[]) pdus[i]);
            strMessage += "SMS From: " + messages[i].getOriginatingAddress();
            strMessage += " : ";
            strMessage += messages[i].getMessageBody();
            strMessage += "\n";
        }

        Toast.makeText(context, strMessage, Toast.LENGTH_SHORT).show();
        Intent inten = new Intent(context, MainActivity.class);
        inten.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_SINGLE_TOP);
        inten .putExtra("strMessage", strMessage);
        context.startActivity(inten);

I'm getting values in my main activity like this:-

Intent inten= getIntent();

String strMessage = inten.getStringExtra("strMessage");
Toast.makeText(getApplicationContext(),strMessage,Toast.LENGTH_LONG).show();

but, getting null value,please guide me properly as I'm new for this.

Maveňツ
  • 1
  • 12
  • 50
  • 89
Namrata
  • 137
  • 1
  • 2
  • 12

1 Answers1

1

You just need to register a BroadcastReceiver with IntentFilter of "android.provider.Telephony.SMS_RECEIVED". Then you can get a received message from the intent like this:

    try {
        Object[] messages = (Object[]) intent.getSerializableExtra("pdus");
        for (Object msg : messages) {
            byte[] bytes = (byte[]) msg;
            SmsMessage message = SmsMessage.createFromPdu(bytes);
            String messageBody = message.getDisplayMessageBody(); // this is your SMS message body
        } catch (Exception e) {
            //catch exception here
        }

You will need to add a <uses-permission android:name="android.permission.RECEIVE_SMS"/> to your AndroidManifest.xml and handle Runtime permissions for API > 23.

Alexander Perfilyev
  • 6,739
  • 2
  • 17
  • 30
  • Thank you.. I've used it but getting null value.Please give me another way to get only new incoming message, and also I've created brodcast receiver class but i don't know how to get it's value in my mainactivity. – Namrata Nov 21 '16 at 06:03
  • you need to do something like this in your `onStart()` method: `IntentFilter filter = new IntentFilter("android.provider.Telephony.SMS_RECEIVED"); registerReceiver(receiver, filter);` then call `unregisterReceiver(receiver);` in your `onStop()`. `receiver` is a field in your `Activity` – Alexander Perfilyev Nov 21 '16 at 08:53