Подтвердить что ты не робот

Как перенести работу на передний план (верхняя часть стека)?

В Android я определил действие ExampleActivity.

Когда мое приложение было запущено, был создан экземпляр этого A-Activity, например A. Когда пользователь нажал кнопку в A, был создан другой экземпляр B-Activity, B. Теперь стек задач - B-A, а B - вверху. Затем пользователь нажал кнопку на B, был создан другой экземпляр C-Activity и C. Теперь стек задач - C-B-A, а C сверху.

Теперь, когда пользователь нажимает кнопку на C, я хочу, чтобы приложение вывело A на передний план, то есть сделайте A в верхней части стека задач, A-C-B.

Как я могу написать код, чтобы это произошло?

4b9b3361

Ответ 1

Вы можете попробовать FLAG_ACTIVITY_REORDER_TO_FRONT (документ описывает именно то, что вы хотите)

Ответ 2

Лучшим способом, который я нашел для этого, было использование того же намерения, что и для домашнего экрана Android - приложение Launcher.

Например:

Intent i = new Intent(this, MyMainActivity.class);
i.setAction(Intent.ACTION_MAIN);
i.addCategory(Intent.CATEGORY_LAUNCHER);
startActivity(i);

Таким образом, всякая активность в моем пакете, которая была недавно использована пользователем, снова возвращается на передний план. Я нашел это полезным при использовании моего сервиса PendingIntent, чтобы вернуть пользователя в мое приложение.

Ответ 3

Вот пример кода, как вы можете это сделать:

Intent intent = getIntent(getApplicationContext(), A.class)

Это позволит убедиться, что у вас есть только один экземпляр действия в стеке.

private static Intent getIntent(Context context, Class<?> cls) {
    Intent intent = new Intent(context, cls);
    intent.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
    return intent;
}

Ответ 4

Я думаю, что комбинация флагов Intent должна делать трюк. В частности, Intent.FLAG_ACTIVITY_CLEAR_TOP и Intent.FLAG_ACTIVITY_NEW_TASK.

Добавьте эти флаги в свои намерения до вызова startActvity.

Ответ 5

FLAG_ACTIVITY_REORDER_TO_FRONT: Если он задан в Intent, переданном Context.startActivity(), этот флаг приведет к тому, что запущенная активность будет перенесена в начало стека истории задач, если она уже запущена.

Intent i = new Intent(context, AActivity.class);
i.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
startActivity(i);

Ответ 6

В целом я считаю, что этот метод управления деятельностью не рекомендуется. Проблема с повторной активацией активности Два шага в стеке - это то, что эта деятельность, вероятно, была убита. Мой совет, чтобы запомнить состояние вашей деятельности и запустить их с помощью startActivity ()

Я уверен, что вы видели эту страницу, но для ваше удобство этой ссылки

Ответ 7

i.setFlags(Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT);

Примечание. Режим запуска homeactivity должен быть single_task

Ответ 8

Если вы хотите перенести действие в верхнюю часть стека при нажатии на уведомление, вам может потребоваться сделать следующее, чтобы сделать работу FLAG_ACTIVITY_REORDER_TO_FRONT:

Решение для меня состояло в том, чтобы сделать широковещательный приемник, который прослушивает транслируемые действия, инициируемые уведомлением. Итак, в основном:

  • Уведомление запускает действие трансляции с дополнительным именем запускаемой операции.

  • Широковещательный приемник улавливает это при нажатии на уведомление, а затем создает намерение запустить это действие с использованием флага FLAG_ACTIVITY_REORDER_TO_FRONT

  • Активность выведена в начало стека действий, нет дубликатов.

Ответ 9

если вы используете "Облачное сообщение Google" для получения push-уведомлений с классом "PendingIntent", следующий код отображает уведомление только на панели действий.

Нажав на уведомление, никакая активность не будет создана, последнее активное действие будет восстановлено с сохранением текущего состояния без проблем.

Intent notificationIntent = new Intent(this, ActBase.class); **notificationIntent.setAction(Intent.ACTION_MAIN); notificationIntent.addCategory(Intent.CATEGORY_LAUNCHER);** PendingIntent contentIntent = PendingIntent.getActivity(this, 0, notificationIntent, 0);

NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(this) .setSmallIcon(R.drawable.ic_launcher) .setContentTitle("Localtaxi") .setVibrate(vibrate) .setStyle(new NotificationCompat.BigTextStyle().bigText(msg)) .setAutoCancel(true) .setOnlyAlertOnce(true) .setContentText(msg);

mBuilder.setContentIntent(contentIntent);

NotificationManager mNotificationManager = (NotificationManager) this.getSystemService(Context.NOTIFICATION_SERVICE);

mNotificationManager.notify(NOTIFICATION_ID, mBuilder.build());

Ciao!