2012-03-27 63 views
0

我试图用AlarmManager来完成重复任务。我使用setInexactRepeating(),并设置间隔为每15分钟(只用于测试目的),但是,它似乎并不奏效。有任何想法吗?我定期任务不会被调用

这里是我的代码:

AlarmReceiver

public class AlarmReceiver extends BroadcastReceiver { 


    @Override 
    public void onReceive(Context context, Intent intent) { 

    Log.w("CacheCrusader", "Recurring Job: Clearing Cache"); 

     } 

} 

二传手

private void setRecurringAlarm(Context context) { 


      Calendar updateTime = Calendar.getInstance(); 
      updateTime.set(Calendar.HOUR_OF_DAY, 20); 
      updateTime.set(Calendar.MINUTE, 15); 

      Intent downloader = new Intent(context, AlarmReceiver.class); 
      PendingIntent recurringDownload = PendingIntent.getBroadcast(context, 
        0, downloader, PendingIntent.FLAG_CANCEL_CURRENT); 
      AlarmManager alarms = (AlarmManager) getSystemService(
        Context.ALARM_SERVICE); 
      alarms.setInexactRepeating(AlarmManager.RTC_WAKEUP, 
        updateTime.getTimeInMillis(), 
        AlarmManager.INTERVAL_FIFTEEN_MINUTES, recurringDownload); 
     } 

代码设置二传手

Context context = getApplicationContext(); 
    setRecurringAlarm(context); 

Android清单宣言

<receiver android:name=".receiver.AlarmReceiver"></receiver> 

logcat中没有生成错误...警报只是从不发生。

回答

1

嗯,这是不准确等等......如果时间间隔设置为15分钟,你必须等待至少半小时,以确保它有/没有被解雇。 您设置的开始时间(20:15)。用1分钟的时间间隔进行测试。而且,如果你需要一个更可靠的时间表,使用setRepeating(),或者可能set()每个报警调用注册下一个。

+0

权。不精确的事情设置了一个地板。您的闹钟不会超过15分钟。上限比这更大。 – Argyle 2012-03-27 02:20:40

+0

感谢您的回答......不幸的是,我一直在等待4个多小时,警报仍然没有被触发。 – 2012-03-27 04:00:41

+0

也许你的应用崩溃了?这将清除警报。在任何情况下,使用'set()'手动注册下一个警报是使用警报的最可靠的方法。你可能想尝试一下。 – 2012-03-27 04:13:58