为什么AlarmManager.setRepeating中的triggerAtTime不起作用

时间:2012-11-16 08:10:40

标签: android

AlarmManager mgr=
      (AlarmManager)ctxt.getSystemService(Context.ALARM_SERVICE);
  Intent i=new Intent(ctxt, AlarmReceiver.class);
  PendingIntent pi=PendingIntent.getBroadcast(ctxt, 0, i, 0);
mgr.setRepeating(
  AlarmManager.ELAPSED_REALTIME_WAKEUP,
  System.currentTimeMillis() + 1000,
  1000, pi);

根据android doc

  

triggerAtMill使用适当的时钟(取决于警报类型),警报首先应该以毫秒为单位的时间。

动作应该在1秒后开始,但它永远不会被调用,为什么?

2 个答案:

答案 0 :(得分:8)

而不是setRepeating()方法中的AlarmManager.ELAPSED_REALTIME_WAKEUP,请使用下面的AlarmManager.RTC_WAKEUP

mgr.setRepeating(AlarmManager.RTC_WAKEUP,System.currentTimeMillis() + 1000, 1000, pi);

答案 1 :(得分:4)

我谷歌相当多但似乎没有人遇到同样的问题。 最后我发现我应该使用SystemClock.elapsedRealtime()。

对于triggerAtMillis,因为type是AlarmManager.ELAPSED_REALTIME_WAKEUP     SystemClock.elapsedRealtime() 应该用来代替     System.currentTimeMillis的()

问题已经解决。