Правильный способ использования уведомлений Android для передачи данных в мое приложение

#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 () будет вызван в существующем экземпляре с намерением, которое использовалось для его повторного запуска.