Sending a notification from a service in Android Sending a notification from a service in Android android android

Sending a notification from a service in Android


Both Activity and Service actually extend Context so you can simply use this as your Context within your Service.

NotificationManager notificationManager =    (NotificationManager) getSystemService(Service.NOTIFICATION_SERVICE);Notification notification = new Notification(/* your notification */);PendingIntent pendingIntent = /* your intent */;notification.setLatestEventInfo(this, /* your content */, pendingIntent);notificationManager.notify(/* id */, notification);


This type of Notification is deprecated as seen from documents:

@java.lang.Deprecatedpublic Notification(int icon, java.lang.CharSequence tickerText, long when) { /* compiled code */ }public Notification(android.os.Parcel parcel) { /* compiled code */ }@java.lang.Deprecatedpublic void setLatestEventInfo(android.content.Context context, java.lang.CharSequence contentTitle, java.lang.CharSequence contentText, android.app.PendingIntent contentIntent) { /* compiled code */ }

Better way
You can send a notification like this:

// prepare intent which is triggered if the// notification is selectedIntent intent = new Intent(this, NotificationReceiver.class);PendingIntent pIntent = PendingIntent.getActivity(this, 0, intent, 0);// build notification// the addAction re-use the same intent to keep the example shortNotification n  = new Notification.Builder(this)        .setContentTitle("New mail from " + "test@gmail.com")        .setContentText("Subject")        .setSmallIcon(R.drawable.icon)        .setContentIntent(pIntent)        .setAutoCancel(true)        .addAction(R.drawable.icon, "Call", pIntent)        .addAction(R.drawable.icon, "More", pIntent)        .addAction(R.drawable.icon, "And more", pIntent).build();NotificationManager notificationManager =   (NotificationManager) getSystemService(NOTIFICATION_SERVICE);notificationManager.notify(0, n); 

Best way
Code above needs minimum API level 11 (Android 3.0).
If your minimum API level is lower than 11, you should you use support library's NotificationCompat class like this.

So if your minimum target API level is 4+ (Android 1.6+) use this:

    import android.support.v4.app.NotificationCompat;    -------------    NotificationCompat.Builder builder =            new NotificationCompat.Builder(this)                    .setSmallIcon(R.drawable.mylogo)                    .setContentTitle("My Notification Title")                    .setContentText("Something interesting happened");    int NOTIFICATION_ID = 12345;    Intent targetIntent = new Intent(this, MyFavoriteActivity.class);    PendingIntent contentIntent = PendingIntent.getActivity(this, 0, targetIntent, PendingIntent.FLAG_UPDATE_CURRENT);    builder.setContentIntent(contentIntent);    NotificationManager nManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);    nManager.notify(NOTIFICATION_ID, builder.build());


@TargetApi(Build.VERSION_CODES.JELLY_BEAN)public void PushNotification(){    NotificationManager nm = (NotificationManager)context.getSystemService(NOTIFICATION_SERVICE);    Notification.Builder builder = new Notification.Builder(context);    Intent notificationIntent = new Intent(context, MainActivity.class);    PendingIntent contentIntent = PendingIntent.getActivity(context,0,notificationIntent,0);    //set    builder.setContentIntent(contentIntent);    builder.setSmallIcon(R.drawable.cal_icon);    builder.setContentText("Contents");    builder.setContentTitle("title");    builder.setAutoCancel(true);    builder.setDefaults(Notification.DEFAULT_ALL);    Notification notification = builder.build();    nm.notify((int)System.currentTimeMillis(),notification);}