Android 如何每小时呼叫一个接受者?
是否可以只在每一个新的小时开始时呼叫接收器?我有正在运行的服务,只有当时间从5点到6点等发生变化时,我才需要呼叫接收器。?有什么方法可以做到吗?您需要使用Android 如何每小时呼叫一个接受者?,android,time,broadcastreceiver,call,hour,Android,Time,Broadcastreceiver,Call,Hour,是否可以只在每一个新的小时开始时呼叫接收器?我有正在运行的服务,只有当时间从5点到6点等发生变化时,我才需要呼叫接收器。?有什么方法可以做到吗?您需要使用AlarmManager。然后安排你希望它通知你的时间。谷歌提供更多的例子 更新: 你能做的就是在下一个小时叫醒它,如果时间是7点30分,那就在8点叫醒它。然后安排它在下一次启动时每小时醒来一次 Calendar c = Calendar.getInstance(); c.set(Calendar.HOUR,c.g
AlarmManager
。然后安排你希望它通知你的时间。谷歌提供更多的例子
更新:
你能做的就是在下一个小时叫醒它,如果时间是7点30分,那就在8点叫醒它。然后安排它在下一次启动时每小时醒来一次
Calendar c = Calendar.getInstance();
c.set(Calendar.HOUR,c.get(Calendar.HOUR)+1);
c.getTimeInMillis(); // use this in alarmmanager for the first time, 60*60*1000 from next time
为此,您可以使用GregorianCalendar和AlarmManager的组合。基本上,将当前时间加1小时,然后向下四舍五入到最近的一小时。请参见此处的示例:
long UPDATE_INTERVAL = 60 * 60 * 1000; // 1 hour in milliseconds.
Calendar c = new GregorianCalendar(); // Get current time
c.add(Calendar.HOUR_OF_DAY, 1); // Add one hour to the current time.
// Set minutes, second, millisecond to 0, such that we ensure that an update is done
// at the end of the hour.
c.set(Calendar.MINUTE, 0);
c.set(Calendar.SECOND, 0);
c.set(Calendar.MILLISECOND, 0);
final AlarmManager alarm = (AlarmManager) context.getSystemService(ALARM_SERVICE);
// Set an alarm, starting from the end of the current hour, every hour, to execute
// the update service.
// pIntent is the pending intent you would like activate.
alarm.setRepeating(AlarmManager.RTC, c.getTimeInMillis(), UPDATE_INTERVAL, pIntent);
我假设您知道如何呼叫接收器。我知道如何使用AlarmManager,但问题是,例如,当服务在7:30启动时,我将AlarmManager设置为60分钟后唤醒,所以它将在8:30唤醒,等等。所以它看起来应该像这个闹钟。setRepeating(AlarmManager.Appeased\u REALTIME\u WAKEUP,SystemClock.elapsedRealtime(),c.getTimeInMillis(),pIntent)?m、 setRepeating(AlarmManager.Appeased_REALTIME_WAKEUP,c.getTimeInMillis(),60*60*1000,p);我昨天用类似的代码解决了这个问题,但主要是我必须将经过的\u REALTIME\u WAKEUP更改为RTC\u WAKEUP。