Навигация вверх с использованием backstack не работает при нажатии из уведомления

Я открываю активность из уведомления, которое открывается нормально. Тем не менее, я хочу открыть родительскую активность, пока я нажимаю кнопку "Назад", в настоящее время она выходит из приложения напрямую. Я хочу, чтобы перейти к HomeScreenActivity.

Вот декларация декларации -

<activity
        android:name="com.discover.activities.MyTrialsActivity"
        android:exported="true"
        android:parentActivityName="com.discover.activities.HomeScreenActivity"
        android:screenOrientation="portrait">
        <meta-data
            android:name="android.support.PARENT_ACTIVITY"
            android:value="com.discover.activities.HomeScreenActivity" />
    </activity>

Вот мой код для генерации уведомлений -

public static PendingIntent getAction(Activity context, int actionId) {
    Intent intent;
    PendingIntent pendingIntent;

    intent = new Intent(context, MyTrialsActivity.class);

    //intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);

    TaskStackBuilder stackBuilder = TaskStackBuilder.create(context);
    // Adds the back stack
    //stackBuilder.addParentStack(HomeScreenActivity.class);
    stackBuilder.addParentStack(HomeScreenActivity.class);
    // Adds the Intent to the top of the stack
    stackBuilder.addNextIntent(intent);
    // Gets a PendingIntent containing the entire back stack
    pendingIntent =
            stackBuilder.getPendingIntent(0 /*request code */, PendingIntent.FLAG_ONE_SHOT);

    /*pendingIntent = PendingIntent.getActivity(context, 0 *//* Request code *//*, intent,
            PendingIntent.FLAG_UPDATE_CURRENT*//*|PendingIntent.FLAG_ONE_SHOT*//*);*/
    return pendingIntent;
}

/**
 * Create and show a simple notification containing the message.
 *
 * @param message Message to show in notification
 */
public static void sendNotification(Context context, String message, int actionId) {
    PendingIntent pendingIntent = NotifUtils.getAction((Activity) context, actionId);

    Uri defaultSoundUri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
    NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(context)
            .setSmallIcon(R.mipmap.ic_launcher)
            .setContentTitle("Title")
            .setContentText(message)
            .setAutoCancel(true)
            .setSound(defaultSoundUri)
            .setVibrate(new long[]{1000})
            .setContentIntent(pendingIntent);

    NotificationManager notificationManager =
            (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);

    notificationManager.notify(0 /* ID of notification */, notificationBuilder.build());
}

4 ответа

Решение

Решение -

Я добавил свою детскую активность в addParentStack(MyTrialActivity.class);
И это сработало, как и ожидалось. Я думал добавив addNextIntent() должен делать это уже, хотя это не сработало таким образом..

Если у вас все настроено правильно и все еще не работает, возможно, вам нужно удалить и переустановить приложение. Кажется, что некоторые изменения в манифесте не обновляются должным образом при запуске приложения!

Попробуйте использовать startActivities(контекстный контекст, намерение [] намерения),

Intent homeIntent = new Intent(context, HomeScreenActivity.class);
        Intent newIntent = new Intent(context, MyTrialsActivity.class);
        Intent[] intents = new Intent[]{homeIntent, newIntent};

        ContextCompat.startActivities(context, intents);

Таким образом, мы можем запустить несколько действий одновременно, поэтому, нажав кнопку "Назад", вы перейдете на домашнюю страницу вместо выхода из приложения.

Я нашел решение в документации Android

// Intent for the activity to open when user selects the notification
Intent detailsIntent = new Intent(this, DetailsActivity.class);

// Use TaskStackBuilder to build the back stack and get the PendingIntent
PendingIntent pendingIntent =
        TaskStackBuilder.create(this)
                        // add all of DetailsActivity's parents to the stack,
                        // followed by DetailsActivity itself
                        .addNextIntentWithParentStack(upIntent)
                        .getPendingIntent(0, PendingIntent.FLAG_UPDATE_CURRENT);

NotificationCompat.Builder builder = new NotificationCompat.Builder(this);
builder.setContentIntent(pendingIntent);

И вот ссылка.

Также см. Этот ответ для получения дополнительных ссылок.

Другие вопросы по тегам