Pending Intent始终为AlarmManager返回null

时间:2017-12-07 22:04:05

标签: android

我创建了一个应该每天运行的警报管理器。 警报只应设置一次,因为在我的MainActivity中调用该方法。但Pending intent始终返回null。 我希望在它创建之后它将返回相同的未决意图,而不必再次设置警报。

public void setAlarm() {
    Intent intent = new Intent(context, BroadcastLogRaces.class);

    PendingIntent pi = PendingIntent.getBroadcast(context, 99,
            intent,PendingIntent.FLAG_NO_CREATE);

    AlarmManager am = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);

    if (pi == null) {

        Calendar calendar = Calendar.getInstance();

        calendar.set(Calendar.HOUR_OF_DAY, 19);
        calendar.set(Calendar.MINUTE,00);
        calendar.set(Calendar.SECOND, 00);


        am.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), 24 * 60 * 60 * 1000, pi);

        Log.i("alarme", "alarme agendado as "+ new Date().toString());

    }
}

1 个答案:

答案 0 :(得分:0)

您在创建FLAG_NO_CREATE时使用了标记PendingIntent,它说

 /**
 * Flag indicating that if the described PendingIntent does not
 * already exist, then simply return null instead of creating it.
 * For use with {@link #getActivity}, {@link #getBroadcast}, and
 * {@link #getService}.
 */

您需要使用FLAG_CANCEL_CURRENTFLAG_UPDATE_CURRENT,它们基本上取消当前待处理的意图,并且如果当前待处理的意图仍然存在,则替换额外的数据。