将数据从接收器传递到活动

时间:2013-12-30 10:35:04

标签: android broadcastreceiver

我真的被卡住了。经过测试很多不同的方法。我在问这个问题。 我正在尝试创建一个应该在特定日期和时间提醒用户的应用程序,就像之前肯定见过的许多其他应用程序一样。我正在使用BroadcastReceiver。我在清单中注册它以在第一次安装应用程序时激活它并在重新启动手机后但问题出在android 3.1-任务杀手可以杀死此接收器所以我认为每次应用程序打开时再次激活它会更好但问题是我不知道我创建了多少个实例,所以第一个问题是:

  1. 如何获得有源接收器?
  2. 所以我可以做出决定。如果它不活动,那么我可以再次激活它。 我在onReceive中所做的是:从数据库获取数据并比较时间和日期到现在。如果应用程序未打开,我想通知通知区域中的用户并将额外数据传递给应用程序',该应用程序运行良好。但是,如果应用程序处于打开状态,我不想在通知区域中通知用户,而是希望将数据传递给活动并在我的应用程序中提醒用户。我将我的活动设为singleTask,并使用startActivity将数据传递给活动,我也使用onNewIntent方法处理新数据,但问题是如果用户正在使用其他活动。第二个和第三个问题是:

    1. 如何知道我的应用是否已开放? (我使用了ActivityManager.getRunningTasks,但我意识到它不是一个好的解决方案,因为它是Task Manger应用程序的api。)

    2. 如何将数据从接收器传递到我的活动? (我使用接口将数据从片段传递到活动,所以我认为它可以在这里使用,但它在这里不起作用)

    3. 经过大量的努力 - 阅读和尝试 - 我知道我仍然做错了所以请指导我。

2 个答案:

答案 0 :(得分:0)

我建议您从Broadcastreceiver启动服务意图。从那里你可以发送一个你可以在活动中捕获的意图

答案 1 :(得分:0)

好的,没有人回答我的问题,但我自己得到了,所以这是我自己的答案:

  1. 每个接收器只有一个实例,您可以启用或禁用它。因此,为了确保它正常运行,您可以在每次运行时在您的活动中启用它。

  2. 在onReceive中,而不是在那里做事,启动服务并在您的活动中使用此服务绑定活动,因此在onBind和onUnbind方法中,您可以更改布尔值并对其进行决策。在onBind中,将值设为True,这意味着您的应用程序在onUnBind中打开,反之亦然。

  3. 最后,将数据从服务传递到活动的最佳方法是使用Interface。

  4. 现在我的应用就像我想要的那样工作。 。希望能有所帮助并节省一些人的时间。