我有一个延伸的类IntentService
。 当我的应用程序重新启动(并在应用程序启动时),在这个类的东西被调用。 它加载一些设置,并做一些事情的背景(这是一种生产力工具/实用程序)。
这IntentService
,我装的时候,我们称之为“东西”,来决定是否通过添加一些警报AlarmManager
。 我具有接收一些不同的参数并执行基于这些参数的一些方法一个BroadcastReceiver。 这是在我调度报警代码:
public void addAlarm(int id, int hourFrom, int hourTo, int minuteFrom, int minuteTo)
{
AlarmManager alarmManager = (AlarmManager) getBaseContext().getSystemService(Context.ALARM_SERVICE);
// Enable
Intent intent = new Intent(Controller.KEY_CONTROLLER_ACTION);
intent.putExtra(Controller.KEY_CONTROLLER_ACTION, Controller.KEY_ACTION_ENABLE);
intent.putExtra(Controller.KEY_CONTROLLER_ID, id);
PendingIntent pendingIntent = PendingIntent.getBroadcast(
this,
id,
intent,
PendingIntent.FLAG_UPDATE_CURRENT);
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.HOUR_OF_DAY, hourFrom);
calendar.set(Calendar.MINUTE, minuteFrom);
calendar.set(Calendar.SECOND, 00);
int hours_24 = 24 * 60 * 60 * 1000;
alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), hours_24, pendingIntent);
// Cancel
Intent cancelIntent = new Intent(Controller.KEY_CONTROLLER_ACTION);
intent.putExtra(Controller.KEY_Controller_ACTION, Controller.KEY_ACTION_END);
intent.putExtra(Controller.KEY_Controller_ID, id);
PendingIntent cancelPendingIntent = PendingIntent.getBroadcast(
this,
id,
cancelIntent,
PendingIntent.FLAG_UPDATE_CURRENT);
calendar.set(Calendar.HOUR_OF_DAY, hourTo);
calendar.set(Calendar.MINUTE, minuteTo);
calendar.set(Calendar.SECOND, 00);
alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), hours_24, cancelPendingIntent);
这里的问题: BroadcastReceiver
(控制器类),只是有时有它onReceive
调用。 当它,这是推迟了几分钟(没什么大不了的,但它是一个,很多时候,它不会被调用的问题)。 第二个报警(cancelIntent) 不会被调用。
我的控制器 BroadcastReceiver
的正确申报清单。 我怀疑它是与这两个Intent
S是相同的(都是有类型的动作演员,以及一个ID)。
我究竟做错了什么? 另外,什么是去更合适的方式已经从-基于报警? 由此,我的意思是我需要一些方法在某一时间发生,和不同的方法(在同一类;控制器BroadcastReceiver
)中的“结束”的时间。