Open application after clicking on Notification

AndroidNotifications

Android Problem Overview


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.

Android Solutions


Solution 1 - Android

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);

Solution 2 - Android

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());


}

Solution 3 - Android

Looks like you missed this part,

notification.contentIntent = pendingIntent;

Try adding this and it should work.

Solution 4 - Android

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

Solution 5 - Android

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);

Solution 6 - Android

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();

}

Solution 7 - Android

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

Solution 8 - Android

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());
    }
}

Solution 9 - Android

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();
}

Solution 10 - Android

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);
}

Solution 11 - Android

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

Solution 12 - Android

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);

	  }

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionReza_RgView Question on Stackoverflow
Solution 1 - AndroidNiraliView Answer on Stackoverflow
Solution 2 - AndroidVinsView Answer on Stackoverflow
Solution 3 - AndroidAndro SelvaView Answer on Stackoverflow
Solution 4 - AndroidDipak KeshariyaView Answer on Stackoverflow
Solution 5 - AndroidAnkit Kumar GargView Answer on Stackoverflow
Solution 6 - AndroidShaikh MohibView Answer on Stackoverflow
Solution 7 - AndroidLily SedghiView Answer on Stackoverflow
Solution 8 - Androidarc_shivaView Answer on Stackoverflow
Solution 9 - AndroidGene BoView Answer on Stackoverflow
Solution 10 - AndroidNeoView Answer on Stackoverflow
Solution 11 - AndroidHimanshi ThakurView Answer on Stackoverflow
Solution 12 - AndroidtimonvladView Answer on Stackoverflow