Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/183.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何每小时呼叫一个接受者?_Android_Time_Broadcastreceiver_Call_Hour - Fatal编程技术网

Android 如何每小时呼叫一个接受者?

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

是否可以只在每一个新的小时开始时呼叫接收器?我有正在运行的服务,只有当时间从5点到6点等发生变化时,我才需要呼叫接收器。?有什么方法可以做到吗?

您需要使用
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。