Abra la aplicación después de hacer clic en Notificación

Tengo una notificación en mi aplicación con el siguiente código:

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

Mis notificaciones se activan muy bien, pero mi problema es que cuando hago clic en notificaciones en el Centro de notificaciones, no se inicia mi aplicación.

Básicamente, después de hacer clic en mi notificación, ¡no pasa nada! ¿Qué debo hacer para iniciar mi actividad principal después de hacer clic en mi notificación? Gracias.

Vea el código a continuación. Estoy usando eso y está abriendo mi 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); 

Aquí está el ejemplo que usa la clase NotificationCompact.Builder, que es la versión más reciente para generar notificaciones.

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

Utilice el siguiente código para un ejemplo completo de notificación simple, en este código puede abrir la aplicación después de hacer clic en Notificación, esto resolverá su problema.

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

Y mira el enlace a continuación para más información.

Ejemplo de notificación simple

Parece que te perdiste esta parte,

 notification.contentIntent = pendingIntent; 

Intenta agregar esto y debería funcionar.

utilizar esta:

  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 se ocupará de la actividad de apertura cuando se haga clic en la notificación

Use el código a continuación para crear una notificación de actividad abierta. Esto funciona para mi. Para el código completo

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

Gracias a las publicaciones anteriores, estas son las líneas principales, extraídas de las respuestas de códigos más largos , que son necesarias para conectar una notificación con el conjunto de escuchas por clic para abrir alguna Actividad de la aplicación.

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

Esta es la forma en que me he acercado.

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

Usa mi ejemplo …

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