У меня есть приложение с уведомлениями, которые открывают определенные действия, если я нажимаю на них. Я хочу, чтобы, если я нажимаю на уведомление, и действие уже открыто, оно не запускается снова, а просто выводится на передний план.
Я думал, что смогу сделать это с флагом FLAG_ACTIVITY_BROUGHT_TO_FRONT
или FLAG_ACTIVITY_REORDER_TO_FRONT
, но он продолжает открывать снова, поэтому я выполняю упражнение дважды.
Это мой код:
event_notification = new Notification(R.drawable.icon,
mContext.getString(R.string.event_notif_message), System.currentTimeMillis());
Intent notificationIntent = new Intent(mContext, EventListActivity.class);
notificationIntent.setFlags(Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT);
sendNotification(event_notification, notificationIntent, mContext.getString(R.string.event_notif_title),
body, Utils.PA_NOTIFICATIONS_ID);
Могу ли я управлять этим с помощью флагов или я должен хранить переменную в SharedPreferences, чтобы проверить, открыта она или нет?
Спасибо!
android
notifications
android-activity
PX Developer
источник
источник
Ответы:
Вам нужно установить
launchMode
атрибут, которыйActivity
вы начинаетеsingleTop
. Это приведет к тому, что входящие Intents будут доставлены существующему экземпляру, а не запускать новый экземпляр, когдаActivity
он уже находится на вершине стека задачи.Это делается в манифесте путем добавления
android:launchMode="singleTop"
к<activity>
элементу. Чтобы получить доступ к последнему Намерению (если вас интересуют какие-либо данные, которые могли быть переданы вместе с ним), переопределитеonNewIntent()
свойActivity
.источник
Попробуйте установить флаги
Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP
вместо.Из документации для FLAG_ACTIVITY_CLEAR_TOP (выделено мое):
источник
new Intent(this, getClass()).addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP)
.Используйте
onNewIntent()
для обработки новых данных от уведомления нажмите и обновите активность.В
onNewIntent
получить новые данные от нового намерения (что послужило новым уведомлением) и поймать их, например:title = intent.getStringExtra("title")
в
onCreate
ранее :)Это обновит текущую активность новыми данными уведомления.
Вы также можете следовать этому руководству.
источник
Просто скопируйте код и вставьте его в свой основной актив запуска.
Вот оригинальный ответ
источник
Я думаю, вы должны добавить немного логики, чтобы это работало, может быть, это может помочь:
Например, у меня есть заставка (Launcher и MAIN) приложения:
И в моем FirebaseService я сделал следующее:
источник
источник