6

我的应用程序显示了一个网站的内容,该网站也有一个通知系统。我想显示是否有新通知,并且我正在使用一个AlarmManager调用IntentService.

我的问题是:我应该在哪里开始/注册这个AlarmManager?我将它放在onCreate()我的活动中只是为了进行概念验证(并且它工作正常,非常感谢:)),但如果你启动该活动两次,你会收到多个警报。

我想出的唯一可能的解决方案是这个,但我不知道这是否是最佳实践

  • onCreate()如果首选项“警报已启动”为假,则启动管理器
  • 设置一些在首选项中启动的变量。

现在,如果警报由于某种原因停止,则无法重新启动它。因此,一个变体将是:

  • 总是在onCreate()
  • 然后总是设置闹钟。

这似乎是一种常见的模式:希望通过警报定期获取信息,而不是多次设置该警报。我该怎么做?何时、何地以及如何登记警报?

另外,继续@Zelimir 的评论:您可以检查某个警报是否已设置好?

理想情况下,无论活动是否启动,都会设置警报,但这可能是另一回事。

为了完整起见,这是我目前用来启动警报的代码:

AlarmManager alMan   = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
Intent i             = new Intent(this, CommentService.class);
PendingIntent penInt = PendingIntent.getService(this, 0, i, 0);

alMan.setInexactRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP,
                          SystemClock.elapsedRealtime(), 
                          AlarmManager.INTERVAL_FIFTEEN_MINUTES, 
                          penInt);

为了更完整,应用程序描述/情况。
该应用程序基本上显示来自某个页面的博客(如果您愿意,可以显示期刊)。它具有添加条目、查看条目、添加评论等活动。在“母亲”网站上,有一个接收通知的选项(例如,当您收到消息时,您也会在此处看到的号码)。我想显示是否有新消息,因此每 xx 分钟检索一次。它现在会显示在通知栏中,但稍后可能会提供某种小部件。

如果您需要更多信息:该应用名为 Androblip,它支持名为 blipfoto.com 的网站

4

1 回答 1

4

何时、何地以及如何登记警报?

这是不可能抽象地回答的。这完全取决于您拒绝在问题中提供的应用程序的业务规则。

如果要一直进行监控,典型的模式是注册警报:

  • onCreate()您的应用程序第一次运行时的主要活动中
  • 在 aBOOT_COMPLETED BroadcastReceiver中,处理重新启动,这会擦除AlarmManager名册

你能检查一下某个闹钟是否已经设置好了?

不,但您可以毫无问题地取消它。只需创建一个等效项并PendingIntent调用cancel().AlarmManager

于 2011-03-16T12:08:08.493 回答