Android AlarmManager不重复

Android AlarmManager不重复,android,service,alarmmanager,android-alarms,repeatingalarm,Android,Service,Alarmmanager,Android Alarms,Repeatingalarm,我正在编写一个“简单”的通知程序,它包括打电话到一个网站,检查响应并通知是否有新的内容 我正在使用一个服务来执行http操作,我希望AlarmManager以给定的频率重复对该服务的调用。我一直在检查教程和其他示例,因为我希望在用户离开设置屏幕(到目前为止唯一的活动)时以及引导完成后安排服务,所以我创建了一个类来包装计划代码 公共类调度程序{ 公共静态布尔cancelScheduledService(上下文ctx、意图serviceIntent){ 布尔成功=真; Log.v(“novUmbri

我正在编写一个“简单”的通知程序,它包括打电话到一个网站,检查响应并通知是否有新的内容

我正在使用一个服务来执行http操作,我希望AlarmManager以给定的频率重复对该服务的调用。我一直在检查教程和其他示例,因为我希望在用户离开设置屏幕(到目前为止唯一的活动)时以及引导完成后安排服务,所以我创建了一个类来包装计划代码

公共类调度程序{
公共静态布尔cancelScheduledService(上下文ctx、意图serviceIntent){
布尔成功=真;
Log.v(“novUmbria”、“Scheduler.cancelScheduledService”);
试一试{
AlarmManager am=(AlarmManager)ctx.getSystemService(Context.ALARM\u服务);
上午好,取消(
PendingIntent.getBroadcast(
ctx,0,
新意图(ctx,NotificatorService.class),
//si ya existe,无属2º
PendingEvent.FLAG_取消_当前
)
);
Log.v(“novUmbria”、“Scheduler.cancelScheduledService Servicio cancelado”);
}捕获(例外e){
Log.e(“novUmbria”、“Scheduler.cancelScheduledService Excepción:+e.getMessage());
成功=错误;
}
回归成功;
}
公共静态布尔scheduleService(上下文ctx、意图serviceIntent、长间隔){
布尔成功=真;
Log.v(“novUmbria”、“Scheduler.scheduleService服务”);
试一试{
Calendar cal=Calendar.getInstance();
SimpleDataFormat timeformat=新的SimpleDataFormat(“HH:mm”);
//timeformat.setTimeZone(TimeZone.getTimeZone(“欧洲/马德里”);
AlarmManager am=(AlarmManager)ctx.getSystemService(Context.ALARM\u服务);
上午10点(
//上午10点(
//AlarmManager.0\u实时\u唤醒,
AlarmManager.RTC_唤醒,
cal.getTimeInMillis(),
间隔
PendingIntent.getBroadcast(
ctx,0,
新意图(ctx,NotificatorService.class),
//si ya existe,无属2º
PendingEvent.FLAG_取消_当前
)
);
Log.v(“novUmbria”、“Scheduler.scheduleService服务程序a las”
+timeformat.format(cal.getTime())
+“cada”+(间隔/60000)+“分钟”
);
startService(ctx、serviceIntent);
Log.v(“novUmbria”、“Scheduler.scheduleService服务iniciado”
);
}捕获(例外e){
Log.e(“novUmbria”,“Scheduler.scheduleService Excepción:+e.getMessage());
成功=错误;
}
回归成功;
}
公共静态布尔startService(上下文ctx、意图serviceIntent){
布尔成功=真;
Log.v(“novUmbria”、“Scheduler.startService”);
试一试{
ctx.startService(服务意向);
Log.v(“novUmbria”、“Scheduler.startService Servicio iniciado”);
}捕获(例外e){
Log.e(“novUmbria”、“Scheduler.startService Excepción:+e.getMessage());
成功=错误;
}
回归成功;
}
}

下面是设置活动对调度程序的调用

//设置活动
@凌驾
受保护的void onStop(){
Log.v(“novUmbria”,“SettingsActivity.onStop”);
Intent serviceIntent=新的Intent(getApplicationContext(),notificatorService.class);
Scheduler.cancelScheduledService(getApplicationContext(),serviceIntent);
长频率=1000*60/2;
scheduleService(getApplicationContext(),
服务意图,
频率
);
Log.v(“novUmbria”、“SettingsActivity.onStop scheduleService”);
super.onStop();
}
问题是:logcat告诉我服务被调度(或者更好地说,它不会引发异常)并第一次执行。但是,在那之后,无论间隔多长或短,它都不会重复。我尝试了几个标志RTC、RTC_WAKEUP、Elased_REALTIME等,但我什么也没有得到

我的测试设备是完全更新的Nexus 4。我甚至重新启动了它,所以我检查了BOOT_COMPLETE接收器是否正常工作,但它从不重复服务调用

你知道问题出在哪里吗

提前谢谢。

我找到了答案

显然,当您想要安排服务时,您没有使用
pendingent.getBroadcast
,而是使用
pendingent.getService

只是那个小小的变化,它应该重复


希望这对其他人有所帮助:)

尝试在startschedule和cancelschedule方法中将PendingEvent.FLAG\u CANCEL\u CURRENT替换为0。你比我快了15秒。我正要告诉你;-)