我一直在开发Android应用程序,我需要每小时执行1个任务。我使用以下代码:
private static final long ALARM_PERIOD = 1000L;
public static void initAlarmManager(Context context) {
Editor editor=PreferenceManager.getDefaultSharedPreferences(context).edit();
editor.putBoolean(context.getString(R.string.terminate_key), true).commit();
AlarmManager manager = (AlarmManager) context.getSystemService(context.ALARM_SERVICE);
Intent i = new Intent(context, AlarmEventReceiver.class);
PendingIntent receiver = PendingIntent.getBroadcast(context, 0, i, 0);
manager.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP,
SystemClock.elapsedRealtime(), ALARM_PERIOD, receiver);
}
它适用于我,但我的客户告诉我,该任务仅工作一次,不会工作1小时。我哪里弄错了?请告诉我。谢谢。
答案 0 :(得分:3)
根据您的代码,ALARM_PERIOD为1000L,作为重复间隔。所以我怀疑警报会在每1000毫秒内完成。
如果您为每小时设置重复间隔,则应为3600000L。 请注意,如果手机重新启动,除非您重新开始,否则您的闹钟管理器将不再有效。
这是我的代码:
private void setAlarmManager() {
Intent intent = new Intent(this, AlarmReceiver.class);
PendingIntent sender = PendingIntent.getBroadcast(this, 2, intent, 0);
AlarmManager am = (AlarmManager) getSystemService(ALARM_SERVICE);
long l = new Date().getTime();
if (l < new Date().getTime()) {
l += 86400000; // start at next 24 hour
}
am.setRepeating(AlarmManager.RTC_WAKEUP, l, 86400000, sender); // 86400000
}
答案 1 :(得分:2)
您是否在manifest.xml中的应用程序标签中添加了接收器标签
<receiver android:name=".AlarmReceiver" android:process=":remote"/>
答案 2 :(得分:1)
我建议你使用Android-TimerTask
而不是Alram-Manager TimerTask
类表示在指定时间运行的任务。任务可以运行一次或重复运行。它完美适合您的要求。
答案 3 :(得分:0)
尝试通过更改此类setRepeating()
方法修改代码
manager.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP,SystemClock.elapsedRealtime(), SystemClock.elapsedRealtime()+(60*60*1000), receiver);
OR
测试它每分钟都在重复
manager.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP,Calendar.getInstance().getTimeInMillis(), Calendar.getInstance().getTimeInMillis()+(1*60*1000), receiver);