130 votes

Ouvrez l'application après avoir cliqué sur Notification

J'ai une notification dans mon application avec le code suivant :

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

}

Mes notifications se déclenchent très bien, mais mon problème est que, lorsque je clique sur une notification dans le centre de notification, cela ne lance pas mon application.

En gros, après avoir cliqué sur ma notification, rien ne se passe ! Que dois-je faire pour que mon activité principale démarre après avoir cliqué sur ma notification ? Merci.

2voto

Himanshi Thakur Points 705

Code de notification pour Android 12 et plus :

Si votre application cible Android 12, vous devez spécifier la mutabilité de chaque objet PendingIntent créé par votre application. Cette exigence supplémentaire améliore la sécurité de votre application.

Avant Android 12

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

Pour Android 12 :

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

Créez d'abord un canal :

 @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";
}

Exemple de notification :

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

1voto

timonvlad Points 1061

Utilisez mon exemple...

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

      }

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X