正确使用Android通知将数据传递给我的应用程序的方法

时间:2011-05-10 08:27:52

标签: android notifications

喂!

我有一个关于通知的问题。

我想创建一个应用程序,解析收到的某个内容的短信。如果短信包含某个内容,则会对其进行解析并提取数据。应该创建一个通知,它应该显示出来。当用户选择通知时,应使用提取的数据调用应用程序。如果应用程序未运行,则应启动它。如果它已在运行,则应显示实例并处理信息。

为了解决这个问题,我做了以下事情: 广播接收器侦听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);

我调用的Activity在onCreate(...)方法中处理Intent。这在应用程序未运行时工作正常。当我已经有一个实例运行时,它被调用并且没有数据传递(或者我没有覆盖正确的方法)。我已经看到调用了onResume()。但是这种方法没有作为参数的意图。解决这个问题的最佳方法是什么?

我做了(在我看来)非常肮脏的解决方法来完成这项工作:

  • 我创建了一个临时活动
  • 我执行与上面相同的代码,除了我调用这个新活动并设置标志notificationIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)和notificationIntent.addFlags(Intent.FLAG_ACTIVITY_MULTIPLE_TASK)
  • 此活动首先发送一个Broadcast,而不是Intent,它们都转发先前解析过的数据。

使用这种方式主应用程序获取数据。如果它已经在运行,它将接收广播并带有意图,如果它没有运行,它将从onCreate(...)方法中的intent接收数据。 但我不认为这是解决这个问题的正确方法,因为它只是为了重定向数据而不做任何其他操作而创建一个虚拟活动。

任何想法和建议都将受到高度赞赏。

由于

1 个答案:

答案 0 :(得分:1)

您可能想要覆盖Activity#onNewIntent(android.content.Intent)

  

...当在活动堆栈顶部重新启动活动而不是正在启动的活动的新实例时,将在现有实例上使用用于重新启动的Intent调用onNewIntent()它