2014-03-31 71 views
1

我想在特定时间触发重复报警&我使用下面的代码,但它不会在我想要的时间触发报警。重复报警没有被触发

boolean weeklyAlarmUp = (PendingIntent.getBroadcast(ctxt, 0, new Intent(ctxt, ScheduledWeeklyService.class), PendingIntent.FLAG_NO_CREATE) != null); 
    if (!weeklyAlarmUp) { 
    AlarmManager mgr = (AlarmManager)ctxt.getSystemService(Context.ALARM_SERVICE); 
    Intent i = new Intent(ctxt, ScheduledWeeklyService.class); 
    PendingIntent pi = PendingIntent.getBroadcast(ctxt, 0, i, 0);     

    Date date = null; 
    try { 
     date = (Date) formatter.parse("17-Mar-2014 13:10:00"); // This date & time will be an user input from some activity 
    } catch (ParseException e) { 
     e.printStackTrace(); 
    } 
    long triggerWeeklyTaskAt = date.getTime(); 
    long currentTime = System.currentTimeMillis(); 

    // Don't trigger the alarm is input date time is in the past, set it to next day but at the same time 
    if (currentTime > triggerWeeklyTaskAt) { 
     Calendar c = Calendar.getInstance(); 
     c.set(Calendar.HOUR_OF_DAY, 13); 
     c.set(Calendar.MINUTE,10); 
     c.set(Calendar.SECOND,0);   
     c.set(Calendar.MILLISECOND, 0); 
     c.add(Calendar.DATE, 1); 
     date = c.getTime(); 
     triggerWeeklyTaskAt = date.getTime(); 
    } 

    Locale locale = Locale.getDefault();  
    msgFormatter.setLocale(locale); 
    Object[] objs = { "Dummy" }; 
    SchedulerLog.logInfo(ctxt, ctxt.getString(R.string.module_scheduler), msgFormatter.format(objs));  
    mgr.setInexactRepeating(AlarmManager.RTC_WAKEUP, triggerWeeklyTaskAt, PERIOD_WEEKLY, pi);  
    } 

谁能告诉我下面的代码有什么问题吗?我该如何检查它会在什么时候触发报警?

谢谢

回答

0

你的外部if语句看起来有点奇怪。你确定执行正在执行它吗?抛出一个Log语句和/或逐步通过代码来确保。

如果我理解你的逻辑,你试图不创建一个重复的PendingIntent。所以如果PI已经存在,你绕过了整个if。问题在于你的闹钟设置也在if语句中。

reference page“...即使其拥有的应用程序的进程被终止,PendingIntent本身仍然可以从其他进程获得使用。”因此,从上次运行中可能匹配的PI依然存在?总是(重新)创建PI可能会更好,但使用FLAG_CANCEL_CURRENT或FLAG_UPDATE_CURRENT取决于您是否要更新细节。