web-dev-qa-db-fra.com

En cliquant sur Notification ne commence pas l'activité prévue?

J'utilise GCM dans mon application et également NotificationManager pour créer une notification à chaque fois qu'un message de message de message est envoyé. mon application qui va afficher le détail du message qui ne se passe pas. Chaque fois que je clique sur notification, aucune activité n'est démarrée et elle reste telle quelle. Mon code pour la création de Notification est:

private void sendNotification(String msg) {
        SharedPreferences prefs = getSharedPreferences(
                DataAccessServer.PREFS_NAME, MODE_PRIVATE);
        mNotificationManager = (NotificationManager) this
                .getSystemService(Context.NOTIFICATION_SERVICE);
        Intent intent = new Intent(this, WarningDetails.class);
        Bundle bundle = new Bundle();
        bundle.putString("warning", msg);
        bundle.putInt("warningId", NOTIFICATION_ID);
        intent.putExtras(bundle);
        // The stack builder object will contain an artificial back stack for
        // the
        // started Activity.
        // This ensures that navigating backward from the Activity leads out of
        // your application to the Home screen.
        TaskStackBuilder stackBuilder = TaskStackBuilder.create(this);
        // Adds the back stack for the Intent (but not the Intent itself)
        stackBuilder.addParentStack(WarningDetails.class);
        // Adds the Intent that starts the Activity to the top of the stack
        stackBuilder.addNextIntent(intent);

        PendingIntent contentIntent = stackBuilder.getPendingIntent(0,
                PendingIntent.FLAG_UPDATE_CURRENT);

        NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(
                this).setSmallIcon(R.drawable.weather_alert_notification)
                .setContentTitle("Weather Notification")
                .setStyle(new NotificationCompat.BigTextStyle().bigText(msg))
                .setContentText(msg);
        String selectedSound = prefs.getString("selectedSound", "");
        if (!selectedSound.equals("")) {
            Uri alarmSound = Uri.parse(selectedSound);
            mBuilder.setSound(alarmSound);

        } else {
            Uri alarmSound = RingtoneManager
                    .getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
            mBuilder.setSound(alarmSound);
        }

        if (prefs.getBoolean("isVibrateOn", false)) {
            long[] pattern = { 500, 500, 500, 500, 500, 500, 500, 500, 500 };
            mBuilder.setVibrate(pattern);
        }

        mBuilder.setContentIntent(contentIntent);
        mNotificationManager.notify(NOTIFICATION_ID, mBuilder.build());
    }

J'ai mis à jour mon code afin de prendre en charge Preserving Navigation when Starting an Activity, comme cela se produit dans une application Gmail utilisant le site Web des développeurs Android, depuis, il ne fonctionne plus.

24
user818455

Mon problème étant résolu, je n'ai qu'à ajouter le drapeau PendingIntent.FLAG_ONE_SHOT également. J'ai donc remplacé: 

PendingIntent contentIntent = stackBuilder
                .getPendingIntent(0, PendingIntent.FLAG_UPDATE_CURRENT);

à 

PendingIntent contentIntent = stackBuilder
                .getPendingIntent(0, PendingIntent.FLAG_UPDATE_CURRENT
                        | PendingIntent.FLAG_ONE_SHOT);
42
user818455

J'ai rencontré le même problème et je l'ai résolu en ajoutant Android: exports = "true" à la déclaration d'activité dans AndroidManifest.xml.

21
Tony Vu

Ici, vous venez de transmettre votre intention à pendingintent: voir ci-dessous

Intent notificationIntent = new Intent(context, Login.class);

 PendingIntent contentIntent = PendingIntent.getActivity(context, 0, notificationIntent, 0);
and set this contentintent into your Notification:

Notification noti = new NotificationCompat.Builder(context)
                    .setSmallIcon(icon_small)
                    .setTicker(message)
                    .setLargeIcon(largeIcon)
                    .setWhen(System.currentTimeMillis())
                    .setContentTitle(title)
                    .setContentText(message)
                    .setContentIntent(**contentIntent**)
                    .setAutoCancel(true).build();

Cela peut vous aider.

2
M D

si vous lancez l'activité souhaitée à l'aide de Action String n'oubliez pas d'ajouter 

<intent-filter>
       <action Android:name="YOUR ACTION STRING"/>
       <category Android:name="Android.intent.category.DEFAULT" />
</intent-filter>

dans la balise <activity></activity>

0
Ahmad Muzakki