【发布时间】:2015-06-02 05:58:13
【问题描述】:
在我的移动应用程序中。我需要触发一个 BroadcastReceiver,它会显示一些弹出/系统通知。
此广播接收器的触发时间
- 应该在每天 13:00 触发。
- 在 13:00 初始触发之后。它应该每 30 秒触发一次。
- 应该在 14:00 后每 30 秒停止一次触发。
我尝试了以下方式
使用 2 个 BroadcastReceiver 的
使用 AlaramManager 调用 BroacastReceiver 1
Intent intent = new Intent("broadcast.receiver.one.action");
PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 0,
intent, 0);
AlarmManager manager = (AlarmManager) context
.getSystemService(Context.ALARM_SERVICE);
manager.setRepeating(AlarmManager.RTC_WAKEUP, oneAmCalenderObject.getTimeInMillis(),AlarmManager.INTERVAL_DAY, pendingIntent);
BroadcastReceiver 1 将在每天 13:00 开始,并包含一个计时器,该计时器将每 30 秒启动一次 BroacastReciever 2。
timer.schedule(new TimerTask() {
public void run() {
if (isLessThanTwoPM()) {
callBroadcastReceiverTwo();
} else {
timer.cancel();
}
}
}, 0, 30 * (1000 * 1));
我想知道,如果有更好的方法。
【问题讨论】:
-
这太疯狂了。所以换句话说,你想阻止设备休眠一小时并因此耗尽大部分电池?
-
好吧,根据我们的客户要求,我们需要在那一小时内每 30 秒从服务器中提取一次数据。注意:推送通知不是一个选项。
-
每 30 秒开始广播。您可以将警报管理器设置为在 1300 和下一个在 1400 进行广播,以停止每 30 秒的广播。那么你所做的是正确的,但正如 Xaver Kapeller 所说,它肯定会耗尽设备电池。所以建议在有更新数据时从服务器实现推送通知,因此在收到推送通知后,您可以从服务器获取数据并执行必要的操作
-
那么您的客户不了解如何为移动设备构建应用程序。如果设备只是在 13:00 到 14:00 之间闲置,而当您在 15:00 回到设备时电池几乎完全耗尽,您的客户会怎么说?你是开发者,你是专家。客户(几乎)永远不会拥有相同的技术专长,因此您有责任做出技术决策。客户不能仅仅因为你应该更了解而决定你如何实现东西。
-
@RajenRaiyarela,我清楚地知道它会耗尽用户的电池。我尝试实现推送通知。但是,推送通知的传递机制并不可靠。因为我需要每 30 秒接收一次数据(我们需要发送快速推送通知,即每 30 秒每个用户 1 个推送通知)。推送通知并非始终发送。
标签: android timer broadcastreceiver alarmmanager