Протестировано в эмуляторе под управлением API 7 образа.
Класс получателя:
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);
}
}
}
Если вы используете API 11+, вы можете использовать Notification.Builder , но мой телефон все еще работает на Gingerbread.
Запись манифеста для получателя.Вашему приложению по-прежнему будут необходимы разрешения, определенные для получения SMS-сообщений, но я предполагаю, что вы уже сделали это:
<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>