I want to create an app which gives notification when sms is received or delivered using a brodcast receiver.How to do that?Thank You.
Asked
Active
Viewed 3,676 times
0
-
Is there a difference to http://stackoverflow.com/questions/4117701/android-sms-broadcast-receiver? – Tim Mar 05 '12 at 10:58
2 Answers
1
try this public class smsActivity extends BroadcastReceiver {
protected static final String TAG = "PlayingAudio";
@Override
public void onReceive(Context context, Intent intent)
{
this.mContext = context;
mFileName = Environment.getExternalStorageDirectory().getAbsolutePath();
mFileName += "/audiorecordtest.3gp";
//---get the SMS message passed in---
Bundle bundle = intent.getExtras();
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]);
incomingnum=msgs[i].getOriginatingAddress();
MsgBody=msgs[i].getMessageBody().toString();
//str += "SMS from " +incomingnum;
//str += " :";
str += MsgBody;
// str += "\n";
System.out.println("Str is "+str);
}
Notification notification = new Notification(android.R.drawable.ic_popup_reminder,
"My Notification", System.currentTimeMillis());
notification.defaults |= Notification.DEFAULT_SOUND;
notification.defaults |= Notification.DEFAULT_VIBRATE;*/
}
}
}
}

user1203673
- 1,015
- 7
- 15
1
Tested in the emulator running an API 7 image.
Receiver class:
package add.yourpackage.here;
import android.app.Notification;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.telephony.SmsMessage;
import android.util.Log;
public class SmsReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Bundle bundle = intent.getExtras();
if (bundle != null) {
StringBuilder smsSummary = new StringBuilder("SMS received from: ");
Object[] pdus = (Object[]) bundle.get("pdus");
SmsMessage[] msgs = new SmsMessage[pdus.length];
for (int i = 0; i < msgs.length; i++) {
msgs[i] = SmsMessage.createFromPdu((byte[]) pdus[i]);
final String sender = msgs[i].getOriginatingAddress();
final String message = msgs[i].getMessageBody().toString();
smsSummary.append(sender);
smsSummary.append("; ").append(message).append("\n");
Log.d("SMS_RECEIVER", "Str is " + smsSummary);
}
NotificationManager notifManager = (NotificationManager) context
.getSystemService(Context.NOTIFICATION_SERVICE);
Notification notif = new Notification(
android.R.drawable.ic_popup_reminder, smsSummary,
System.currentTimeMillis());
notif.defaults |= Notification.DEFAULT_SOUND;
notif.defaults |= Notification.DEFAULT_VIBRATE;
notif.defaults |= Notification.DEFAULT_LIGHTS;
// The notification will be canceled when clicked by the user...
notif.flags |= Notification.FLAG_AUTO_CANCEL;
// ...but we still need to provide and intent; an empty one will
// suffice. Alter for your own app's requirement.
Intent notificationIntent = new Intent();
PendingIntent pi = PendingIntent.getActivity(context, 0,
notificationIntent, 0);
notif.setLatestEventInfo(context, "SMS Notification",
"Another txt for you", pi);
notifManager.notify(0, notif);
}
}
}
If you are running API 11+ you can use the Notification.Builder instead, but my phone is still on Gingerbread.
Manifest entry for the receiver. Your app will still need permissions defined to receive SMS messages, but I assume you've already done that:
<receiver
android:name=".service.SmsReceiver"
android:enabled="true" >
<intent-filter>
<action android:name="android.provider.Telephony.SMS_RECEIVED" />
<action android:name="android.intent.action.DATA_SMS_RECEIVED" />
</intent-filter>
</receiver>

Chilledrat
- 2,593
- 3
- 28
- 38
-
1That's okay this code will also work fine for API 8 :-) . I only tested on 7 as it is the lowest API I have installed and you didn't state one in the original question. – Chilledrat Mar 24 '12 at 16:30