(пропустите краткую сводку) У меня проблемы с последовательностью операций в моем приложении.Приложение имеет 3 действия, которые переходят от A к B к C (или от C к B к A, если назад нажимается последовательно).При нормальной работе приложение работает нормально, проблема, с которой я сталкиваюсь, заключается в получении уведомления C2DM.
Получив уведомление, я бы хотел, чтобы PendingIntent было отправлено текущей активной деятельности или в случаеесли приложение не запущено, запустите приложение.
В получателе уведомлений создается PendingIntent с любой текущей активностью (которая содержится в классе Application), это тоже работает нормально.
Однако проблемы возникают, когда действие изменилось по сравнению с тем, с которым был создан PendingIntent.
т.е. уведомление получено в действии C, а PendingIntent создано с намерением, указывающим на действие C. Пользователь возвращается к действию Aи щелкает уведомление, которое запускает намерение, и запускает действие C, и я хочу, чтобы оно было отправлено в A.
Что я хотел бы, это отправить намерение любому текущему действию.Я попытался создать Activity X, которая является целью PendingIntent, а затем, когда Activity X создается, проверить, какая Activity в настоящее время активна и которая хранится в классе Application.
Но я также столкнулся с проблемами здесь с Intentflags.It хотел использовать флаг SINGLE_TOP для намерений, которые я буду использовать, чтобы гарантировать, что onNewIntent вызывается для текущего Activity, чтобы у меня не было проблем с кодом в onCreate и onResume.
Проблема, с которой я здесь сталкиваюсьв том, что Activity X сейчас находится на вершине стека активности, а одна вершина - нет из-за этого.Я попытался использовать флаги NO_HISTORY и EXCLUDE_FROM_RECENTS для ожидающего намерения, чтобы действие X не добавлялось в стек, а затем использовать SINGLE_TOP для запуска действий A, B или C, но при этом создается новый их экземпляр, а не тот, которыйсуществует.
В заключение:
4 activities: A,B,C,X and a receiver for notifications.
on receipt of a notification:
//not sure which is better to use or even if they're right for my purpose
start X with a PendingIntent with FLAG_ACTIVITY_NO_HISTORY or FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS
Acivity X then gets the currently running activity from Application (A,B or C)
create an intent for the current activity (A,B or C) with FLAG_ACTIVITY_SINGLE_TOP
But onNewIntent is never called a new instance of A,B or C is created.
Есть ли более разумный подход к этой проблеме, неправильно ли используются флаги?Я неправильно понимаю что-то фундаментальное в том, как работает намерение, любая помощь будет оценена.И извините за длинный вопрос.Также, если требуется код, я могу опубликовать его завтра, так как я далеко от своей рабочей станции.