#android #notifications
#Android #уведомления
Вопрос:
Hallo!
У меня есть вопрос, касающийся уведомлений.
Я хочу создать приложение, которое анализирует полученные SMS для определенного контента. Если sms содержит определенный контент, он анализируется и данные извлекаются. Уведомление должно быть создано, и оно должно отображаться. Когда пользователь выбирает уведомление, приложение должно быть вызвано с извлеченными данными. Если приложение не запущено, его следует запустить. Если оно уже запущено, экземпляр должен отображаться и обрабатывать информацию.
Чтобы решить эту проблему, я сделал следующее: широковещательный приемник прослушивает SMS и анализирует их. Для вызова приложения я использую следующий код:
NotificationManager mNotificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
Notification notification = new Notification(icon, tickerText, when); Bundle bundleNotification = creatingNotificationBundle(...);
Intent notificationIntent = new Intent(Intent.ACTION_MAIN); notificationIntent.setClassName(...); notificationIntent.putExtras(bundleNotification);
PendingIntent contentIntent = PendingIntent.getActivity(context, 0, notificationIntent, 0); notification.setLatestEventInfo(context, contentTitle, contentText, contentIntent); mNotificationManager.notify((int) System.currentTimeMillis(), notification);
Действие, которое я вызываю, обрабатывает намерение в методе onCreate (…). Это отлично работает, когда приложение не запущено. Когда у меня уже запущен экземпляр, он вызывается, но данные не передаются (или я не перезаписываю правильные методы). Я видел, что вызывается onResume (). Но у этого метода нет intent в качестве параметра. Какова наилучшая идея для решения этой проблемы?
Я сделал (на мой взгляд) очень грязный обходной путь, чтобы заставить это работать:
- Я создал временную активность
- Я выполняю тот же код, что и выше, за исключением того, что я вызываю это новое действие и устанавливаю флаги notificationIntent.addFlags (намерение.FLAG_ACTIVITY_NEW_TASK) и notificationIntent.addFlags (намерение.FLAG_ACTIVITY_MULTIPLE_TASK)
- это действие отправляет сначала широковещательную рассылку, а затем намерение, пересылающее ранее проанализированные данные.
Используя этот способ, основное приложение всегда получает данные. Если оно уже запущено, оно получает широковещательную рассылку и выходит вперед с намерением, если оно не запущено, оно получает данные из намерения в методе onCreate (…). Но я не думаю, что это правильное решение для этой проблемы, поскольку создавать фиктивное действие только для перенаправления данных и ничего больше не делать довольно грязно.
Любые идеи и предложения будут высоко оценены.
Спасибо
Ответ №1:
Вы, вероятно, хотите переопределить Activity#onNewIntent (android.content.Намерение):
… когда действие запускается повторно, находясь в верхней части стека действий, вместо нового экземпляра запускаемого действия onNewIntent () будет вызван в существующем экземпляре с намерением, которое использовалось для его повторного запуска.