140

I have a notification in my app with the following code:

//Notification Start notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); int icon = R.drawable.n1; CharSequence tickerText = "Call Blocker"; long when = System.currentTimeMillis(); //now Notification notification = new Notification(icon, tickerText, when); Intent notificationIntent = new Intent(context, Main.class); PendingIntent contentIntent = PendingIntent.getActivity(context, 0, notificationIntent, 0); Context context = getApplicationContext(); CharSequence title = "Call Blocker"; text = "Calls will be blocked while driving"; notification.setLatestEventInfo(context, title, text, contentIntent); notification.flags |= Notification.FLAG_ONGOING_EVENT; notification.flags |= Notification.FLAG_SHOW_LIGHTS; notificationManager.notify(1, notification); } 

My notifications fires very well, but my problem is that, when I click on notification in Notification Center, it does not start my app.

Basically, after clicking on my notification nothing happens! What should I do, in order to start my Main activity after clicking on my notification. Thanks.

7
  • 2
    try this Commented Dec 5, 2012 at 5:14
  • 2
    move Context context = getApplicationContext(); before Notification notification = new Notification(icon, tickerText, when); maybe you are not passing right context for starting Activity Commented Dec 5, 2012 at 5:20
  • More than 4 years ago... what a long journey you take from that day :) but nothing change in android notification ;) Commented Jun 26, 2017 at 11:41
  • @HamedGh Almost 5 years ago! :))) Commented Jul 2, 2017 at 10:27
  • 1
    @Reza_Rg is 7 years ago. I have the same problem! Commented May 24, 2019 at 10:41

12 Answers 12

184

See below code. I am using that and it is opening my HomeActivity.

 NotificationManager notificationManager = (NotificationManager) context .getSystemService(Context.NOTIFICATION_SERVICE); Notification notification = new Notification(icon, message, when); Intent notificationIntent = new Intent(context, HomeActivity.class); notificationIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP); PendingIntent intent = PendingIntent.getActivity(context, 0, notificationIntent, 0); notification.setLatestEventInfo(context, title, message, intent); notification.flags |= Notification.FLAG_AUTO_CANCEL; notificationManager.notify(0, notification); 
Sign up to request clarification or add additional context in comments.

2 Comments

Notiification(int, java.lang.CharSequence, long) has been deprecated since this post, need to use NotificationCompat.Builder.
can not resolve method notification.setLatestEventInfo
70

Here's example using NotificationCompact.Builder class which is the recent version to build notification.

private void startNotification() { Log.i("NextActivity", "startNotification"); // Sets an ID for the notification int mNotificationId = 001; // Build Notification , setOngoing keeps the notification always in status bar NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(this) .setSmallIcon(R.drawable.ldb) .setContentTitle("Stop LDB") .setContentText("Click to stop LDB") .setOngoing(true); // Create pending intent, mention the Activity which needs to be //triggered when user clicks on notification(StopScript.class in this case) PendingIntent contentIntent = PendingIntent.getActivity(this, 0, new Intent(this, StopScript.class), PendingIntent.FLAG_UPDATE_CURRENT); mBuilder.setContentIntent(contentIntent); // Gets an instance of the NotificationManager service NotificationManager mNotificationManager = (NotificationManager) this.getSystemService(Context.NOTIFICATION_SERVICE); // Builds the notification and issues it. mNotificationManager.notify(mNotificationId, mBuilder.build()); } 

1 Comment

What the hell am I doing wrong? I have exactly this code but it's not working when I click the notification.
17

Looks like you missed this part,

notification.contentIntent = pendingIntent; 

Try adding this and it should work.

Comments

14

Please use below code for complete example of simple notification, in this code you can open application after clicking on Notification, it will solve your problem.

public class AndroidNotifications extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); Button notificationButton = (Button) findViewById(R.id.notificationButton); notificationButton.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { Timer timer = new Timer(); timer.schedule(new TimerTask() { @Override public void run() { // Notification Title and Message Notification("Dipak Keshariya (Android Developer)", "This is Message from Dipak Keshariya (Android Developer)"); } }, 0); } }); } // Notification Function private void Notification(String notificationTitle, String notificationMessage) { NotificationManager notificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE); android.app.Notification notification = new android.app.Notification( R.drawable.ic_launcher, "Message from Dipak Keshariya! (Android Developer)", System.currentTimeMillis()); Intent notificationIntent = new Intent(this, AndroidNotifications.class); PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, notificationIntent, 0); notification.setLatestEventInfo(AndroidNotifications.this, notificationTitle, notificationMessage, pendingIntent); notificationManager.notify(10001, notification); } } 

And see below link for more information.

Simple Notification Example

Comments

6

use this:

 Notification mBuilder = new NotificationCompat.Builder(this) .setSmallIcon(R.drawable.ic_music) .setContentTitle(songName).build(); mBuilder.contentIntent= PendingIntent.getActivity(this, 0, new Intent(this, MainActivity.class), PendingIntent.FLAG_UPDATE_CURRENT); 

contentIntent will take care of openning activity when notification clicked

Comments

6

Use below code for create notification for open activity. It works for me. For full code

 Intent myIntent = new Intent(context, DoSomething.class); PendingIntent pendingIntent = PendingIntent.getActivity( context, 0, myIntent, Intent.FLAG_ACTIVITY_NEW_TASK); myNotification = new NotificationCompat.Builder(context) .setContentTitle("Exercise of Notification!") .setContentText("Do Something...") .setTicker("Notification!") .setWhen(System.currentTimeMillis()) .setContentIntent(pendingIntent) .setDefaults(Notification.DEFAULT_SOUND) .setAutoCancel(true) .setSmallIcon(R.drawable.ic_launcher) .build(); notificationManager = (NotificationManager)context.getSystemService(Context.NOTIFICATION_SERVICE); notificationManager.notify(MY_NOTIFICATION_ID, myNotification); 

1 Comment

That setAutoCancel(true) is what I was looking for.
6
public void addNotification() { NotificationCompat.Builder mBuilder=new NotificationCompat.Builder(MainActivity.this); mBuilder.setSmallIcon(R.drawable.email); mBuilder.setContentTitle("Notification Alert, Click Me!"); mBuilder.setContentText("Hi,This notification for you let me check"); Intent notificationIntent = new Intent(this,MainActivity.class); PendingIntent conPendingIntent = PendingIntent.getActivity(this,0,notificationIntent,PendingIntent.FLAG_UPDATE_CURRENT); mBuilder.setContentIntent(conPendingIntent); NotificationManager manager=(NotificationManager)getSystemService(Context.NOTIFICATION_SERVICE); manager.notify(0,mBuilder.build()); Toast.makeText(MainActivity.this, "Notification", Toast.LENGTH_SHORT).show(); } 

1 Comment

While this code snippet may solve the question, including an explanation really helps to improve the quality of your post. Remember that you are answering the question for readers in the future, and those people might not know the reasons for your code suggestion.
5

Notification code for android 12 and above :

If your app targets Android 12, you must specify the mutability of each PendingIntent object that your app creates. This additional requirement improves your app's security.

Before ANDROID 12

PendingIntent contentIntent = PendingIntent.getActivity(context, (int) System.currentTimeMillis(), notificationIntent, PendingIntent.FLAG_UPDATE_CURRENT); 

For ANDROID 12 :

PendingIntent contentIntent = PendingIntent.getActivity(context, (int) System.currentTimeMillis(), notificationIntent, PendingIntent.FLAG_UPDATE_CURRENT | PendingIntent.FLAG_IMMUTABLE); 

Create channel first :

 @RequiresApi(api = Build.VERSION_CODES.O) private synchronized String createChannel() { NotificationManager mNotificationManager = (NotificationManager) this.getSystemService(Context.NOTIFICATION_SERVICE); String name = "dummy text for channel"; int importance = NotificationManager.IMPORTANCE_LOW; NotificationChannel mChannel = new NotificationChannel("channel name, name, importance); mChannel.setShowBadge(false); mChannel.enableLights(true); mChannel.setLightColor(Color.BLUE); if (mNotificationManager != null) { mNotificationManager.createNotificationChannel(mChannel); } else { stopSelf(); } return "Channel"; } 

Notification Example :

String channel=""; if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) channel = createChannel(); else { channel = ""; } RemoteViews mContentView = new RemoteViews(getApplicationContext().getPackageName(), R.layout.general_notification_layout_new); NotificationManager mNotificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE); NotificationCompat.Builder builder = new NotificationCompat.Builder(context, channel); Intent notificationIntent = new Intent(getApplicationContext(), MainActivity.class); notificationIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); notificationIntent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP); PendingIntent contentIntent = PendingIntent.getActivity(context, (int) System.currentTimeMillis(), notificationIntent, PendingIntent.FLAG_UPDATE_CURRENT | PendingIntent.FLAG_IMMUTABLE); builder.setSmallIcon(R.drawable.notification_small_icon_one) .setPriority(NotificationCompat.PRIORITY_HIGH) .setSound(notificationSound) .setColor(ContextCompat.getColor(this, R.color.colorPrimary)) .setCustomContentView(mContentView) .setCustomBigContentView(mContentView) .setContentIntent(contentIntent); builder.setAutoCancel(true); Notification notification = builder.build(); mNotificationManager.notify(notificationId, notification); 

Android 12 notifications

Comments

3

Thanks to above posts, here's the main lines - distilled from the longer code answers - that are necessary to connect a notification with click listener set to open some app Activity.

private Notification getNotification(String messageText) { Notification.Builder builder = new Notification.Builder(this); builder.setContentText(messageText); // ... Intent appActivityIntent = new Intent(this, SomeAppActivity.class); PendingIntent contentAppActivityIntent = PendingIntent.getActivity( this, // calling from Activity 0, appActivityIntent, PendingIntent.FLAG_UPDATE_CURRENT); builder.setContentIntent(contentAppActivityIntent); return builder.build(); } 

Comments

3

This is the way that I have approached.

public class AppFCMService extends FirebaseMessagingService { private final static String TAG = "FCM Message"; String notify, requstId, Notification; PendingIntent pendingIntent; @Override public void onMessageReceived(RemoteMessage remoteMessage) { Log.d(TAG, "From: " + remoteMessage.getFrom()); Log.d(TAG, "Notification Message Body: " + remoteMessage.getNotification().getBody()); //split string and getting order id from notification String Str = remoteMessage.getNotification().getBody(); String[] tmp; tmp = Str.split(" "); String temp1 = tmp[0]; String temp2 = tmp[1]; String id = tmp[2]; notify = temp1 + " " + temp2; requstId = id; showNotification(remoteMessage.getNotification().getBody()); } private void showNotification(String messageBody) { // check whether session has been initiated or not if (new SessionHelper(getApplicationContext()).isLoggedIn()) { if (notify.equalsIgnoreCase("Travel request")) { Intent intent = new Intent(this, ViewTravelDetailsActivity.class); intent.putExtra("TravelRequestID", requstId); intent.putExtra("BackPress", "Notify"); pendingIntent = PendingIntent.getActivity(this, 0, intent, PendingIntent.FLAG_ONE_SHOT); } else if (notify.equalsIgnoreCase("Timesheet replied")) { Intent intent = new Intent(this, ViewReplyActivity.class); intent.putExtra("timesheetActivityID", requstId); intent.putExtra("BackPress", "Notify"); intent.putExtra("RealmData", "DeleteRealm"); intent.putExtra("isToday", "true"); pendingIntent = PendingIntent.getActivity(this, 0, intent, PendingIntent.FLAG_ONE_SHOT); } else { Intent intent = new Intent(this, Dashboard.class); intent.putExtra("timesheetActivityID", requstId); pendingIntent = PendingIntent.getActivity(this, 0, intent, PendingIntent.FLAG_ONE_SHOT); } } else { Intent intent = new Intent(this, LoginActivity.class); intent.putExtra("timesheetActivityID", requstId); pendingIntent = PendingIntent.getActivity(this, 0, intent, PendingIntent.FLAG_ONE_SHOT); } Bitmap notifyImage = BitmapFactory.decodeResource(getResources(), R.mipmap.ic_launcher); Uri defaultSoundUri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION); NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(this) .setSmallIcon(R.mipmap.ic_launcher) .setLargeIcon(notifyImage) .setColor(Color.parseColor("#FFE74C3C")) .setContentTitle("TEST") .setContentText(messageBody) .setAutoCancel(true) .setSound(defaultSoundUri) .setContentIntent(pendingIntent); NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); notificationManager.notify(0, notificationBuilder.build()); } } 

Comments

2
public static void notifyUser(Activity activity, String header, String message) { NotificationManager notificationManager = (NotificationManager) activity .getSystemService(Activity.NOTIFICATION_SERVICE); Intent notificationIntent = new Intent( activity.getApplicationContext(), YourActivityToLaunch.class); TaskStackBuilder stackBuilder = TaskStackBuilder.create(activity); stackBuilder.addParentStack(YourActivityToLaunch.class); stackBuilder.addNextIntent(notificationIntent); PendingIntent pIntent = stackBuilder.getPendingIntent(0, PendingIntent.FLAG_UPDATE_CURRENT); Notification notification = new Notification.Builder(activity) .setContentTitle(header) .setContentText(message) .setDefaults( Notification.DEFAULT_SOUND | Notification.DEFAULT_VIBRATE) .setContentIntent(pIntent).setAutoCancel(true) .setSmallIcon(drawable.notification_icon).build(); notificationManager.notify(2, notification); } 

Comments

1

Use my example...

 public void createNotification() { NotificationManager notificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE); Notification notification = new Notification(R.drawable.icon, "message", System.currentTimeMillis()); // Hide the notification after its selected notification.flags |= Notification.FLAG_AUTO_CANCEL; Vibrator vibrator = (Vibrator)getSystemService(Context.VIBRATOR_SERVICE); long[] pattern = { 0, 100, 600, 100, 700}; vibrator.vibrate(pattern, -1); Intent intent = new Intent(this, Main.class); PendingIntent activity = PendingIntent.getActivity(this, 0, intent, 0); String sms = getSharedPreferences("SMSPREF", MODE_PRIVATE).getString("incoming", "EMPTY"); notification.setLatestEventInfo(this, "message" , sms, activity); notification.number += 1; notificationManager.notify(0, notification); } 

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.