0

我有两节课AlarmService.class,ReminderActivity.class。当当前时间等于闹钟时间时,AlarmService 类调用 ReminderActivity。例如,如果我为 3.01、3.02、3.03、3.04 PM 设置闹钟。我在下午 3.01 得到第一个 ReminderActivity。问题是 3.02 PM ReminderActivity 超过了现有的,当我处理下午 3.01 的 ReminderActivity 时。完成 3.01PM 后,我需要显示 3.02PM ReminderActivity。3.03PM ReminderActivity 在我完成 3.02PM 后显示,依此类推。如何做到这一点?帮我。

提前致谢。

4

3 回答 3

0

我看到了两种方法:

A. 根据Activity的launchMode,你可以使用set android:launchMode="singleInstance"。当您不需要担心应用程序包含多少堆栈时,这是一个简单的情况。只是不要忘记Intent.FLAG_ACTIVITY_NEW_TASK从服务中添加标志。

B. 如果堆栈数是个问题,那么您可以执行以下操作:在 ReminderActivity 中注册一个优先级高于默认值的有序广播。在 onCreate 中注册并在 onDestroy() 中取消注册。在 Manifest.xml 中注册另一个广播接收器(我们称之为它MyOrderedReceiver),默认优先级应该只创建上述活动。然后,当触发警报时,您将通过服务发送有序广播:sendOrderedBroadcast(new Intent("myAction"));

如果活动已经创建,那么它将首先在其接收器中处理意图,然后中止该意图,这样MyOrderedReceiver就不会处理从AlarmService. 如果活动不在堆栈上,则 MyOrderedReceiver 将通过启动 ReminderActivity 来处理意图。

如果您发现选项 B 有用并且您需要更多,我可以发布更多关于此的实现细节。

于 2013-06-12T09:42:58.310 回答
0

使

android:launchMode="singleTask"

在清单中。这将确保只创建一个 ReminderAcitivity 实例。现在要实现它如何处理 3:01、3:02 等,您在活动中定义 onNewIntent() 函数。

此致

于 2013-06-12T09:21:50.540 回答
0

如果活动是第一次从警报服务启动,则将布尔值保存到 sharedpreferences 属性。

如果此值为真,那么对于下一个警报事件,您可以:

  • 在 AlarmService 上将数据保存到 SQLite 数据库。如果当前活动已完成(用户按下完成、确定、...之类的按钮),您可以再次启动相同的活动并使用新数据加载它。
  • 向 ReminderActivity 上的广播接收器注册发送意图,共享相同的操作。该活动生成一个对话框,询问用户该做什么。
  • 您从 AlarmService 生成通知。

如果我是你,我会使用通知,用户可以决定启动哪个通知。

于 2013-06-12T09:33:27.480 回答