Правильный способ использования уведомлений Android для передачи данных в мое приложение - PullRequest
0 голосов
/ 10 мая 2011

Hallo!

У меня вопрос по поводу уведомлений.

Я хочу создать приложение, которое анализирует полученные 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);

Активность, которую я вызываю, обрабатывает Intent в методе onCreate (...).Это прекрасно работает, когда приложение не работает.Когда у меня уже запущен экземпляр, он вызывается и данные не передаются (или я не перезаписываю правильные методы).Я видел, что onResume () вызывается.Но этот метод не имеет намерения в качестве параметра.Какова лучшая идея для решения этой проблемы?

Я сделал (на мой взгляд) очень грязный обходной путь, чтобы получить эту работу:

  • Я создал временное действие
  • Я делаю тот же код, что и выше, за исключением того, что я вызываю это новое действие и устанавливаю флаги messagesIntent.addFlags (Intent.FLAG_ACTIVITY_NEW_TASK) иtificationIntent.addFlags (Intent.FLAG_ACTIVITY_MULTIPLE_TASK)
  • эта операция отправляет сначала широковещательную рассылкучем намерение и пересылка ранее проанализированных данных.

Используя этот способ, основное приложение всегда получает данные.Если он уже запущен, он получает широковещательную рассылку и выходит на передний план с намерением, если он не запущен, он получает данные из намерения в методе onCreate (...).Но я не думаю, что это правильное решение для этой проблемы, так как это выглядит довольно грязно, чтобы создать фиктивную операцию только для перенаправления данных и больше ничего не делать.

Любые идеи и предложения будут высоко оценены.

Спасибо

1 Ответ

1 голос
/ 20 мая 2011

Возможно, вы хотите переопределить Activity # onNewIntent (android.content.Intent) :

… когда действие перезапускается в верхней части стека действий вместо нового экземпляра запускаемого действия, onNewIntent () вызывается для существующего экземпляра с Intent, который использовался для перезапуска это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...