wake-up-neo.net

Durch Klicken auf Benachrichtigung wird die beabsichtigte Aktivität nicht gestartet.

Ich verwende GCM in meiner Anwendung und verwende auch NotificationManager zum Erstellen einer Benachrichtigung, wenn eine GCM-Nachricht empfangen wird. Bis jetzt funktioniert alles einwandfrei und die GCM-Nachricht wird im Benachrichtigungsbereich richtig angezeigt. Wenn ich jedoch auf die Benachrichtigung klicke, sollte eine Aktion gestartet werden meine Anwendung, die die Nachrichtendetails anzeigt, die nicht geschehen. Jedes Mal, wenn ich auf Benachrichtigung klicke, wird keine Aktivität gestartet und es bleibt wie sie ist. Mein Code zum Erstellen von Benachrichtigung lautet:

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

Ich habe meinen Code aktualisiert, um Preserving Navigation when Starting an Activity zu unterstützen, genauso wie er in der Google Mail-Anwendung über die Android-Entwicklerwebsite verwendet wird. Seitdem hat er aufgehört zu funktionieren. Jemand Bitte führen Sie aus, was mir fehlt oder was in diesem Code falsch ist.

24
user818455

Mein Problem wurde gelöst. Ich muss nur noch PendingIntent.FLAG_ONE_SHOT flag hinzufügen, also ersetze ich: 

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

zu 

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

Ich bin auf das gleiche Problem gestoßen und habe es behoben, indem ich Android: exported = "true" zur Aktivitätsdeklaration in AndroidManifest.xml hinzugefügt habe.

21
Tony Vu

Hier haben Sie gerade Ihre Absicht in Pendingintent übergeben: siehe unten

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

Das kann dir helfen.

2
M D

wenn Sie die beabsichtigte Aktivität mit Action String starten, vergessen Sie nicht, hinzuzufügen 

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

im <activity></activity>-Tag

0
Ahmad Muzakki