Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(System.currentTimeMillis());
calendar.set(Calendar.HOUR_OF_DAY, h);
calendar.set(Calendar.MINUTE, m);
Intent i = new Intent(DefaultActivity.fullname(Actions.TIME_CHANGED));
i.putExtra(TIME_NAME, name);
i.putExtra(TIME_CLOCK, clock);
PendingIntent pendingIntent = PendingIntent.getService(ctx, index, i, PendingIntent.FLAG_UPDATE_CURRENT);
AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);
alarmManager.setRepeating(AlarmManager.RTC, calendar.getTimeInMillis(), AlarmManager.INTERVAL_DAY, pendingIntent);
问题是我什么时候打电话给我的服务" Actions.TIME_CHANGED"
我的startCommand是这样的:
@Override
public int onStartCommand(Intent intent, int flags, int startId)
{
String intentAction = intent == null ? null : intent.getAction();
if (intentAction != null)
{
Log.e(MainActivity.WATERMELON_TAG, "action: " + intentAction);
if (intentAction.equals(DefaultActivity.fullname(Actions.TIME_CHANGED)))
{
clockIsChanged(intent);
}
if (intentAction.equals(DefaultActivity.fullname(Actions.TIME_RENEW_CHECKING)))
{
reNew();
}
if (intentAction.equals(DefaultActivity.fullname(Actions.FIRST_TIME_BOOT)))
{
reNew();
}
}
return START_STICKY;
}
我不知道问题是什么。我的解决方案是我添加一个函数来检查pendingintent时间是否等于当前时间执行我的任务但它不是一个好的解决方案。
为什么会这样?
提前致谢
答案 0 :(得分:2)
文档说:
注意:从API 19开始,所有重复警报都不准确。
因此,如果您使用的API高于19,则最好使用AlarmManager.setExact
并在onReceive
- 方法中重新启动闹钟。
另一个可能性是使用低于19的API级别。