alarmmanager不会按时触发待处理的意图

时间:2014-07-05 15:27:13

标签: android android-intent alarmmanager

我正在开发一个只想在特定时间每天发出警报的Android项目。为此目的,我在服务中使用alarmmanger。我将我的未决意图添加到闹钟手中并设置我的时间,如下所示:

    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时间是否等于当前时间执行我的任务但它不是一个好的解决方案。

为什么会这样?

提前致谢

1 个答案:

答案 0 :(得分:2)

文档说:

  

注意:从API 19开始,所有重复警报都不准确。

因此,如果您使用的API高于19,则最好使用AlarmManager.setExact并在onReceive - 方法中重新启动闹钟。

另一个可能性是使用低于19的API级别。