3
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);

根据安卓文档

triggerAtMillis 警报应该首先响起的毫秒时间,使用适当的时钟(取决于警报类型)。

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

4

2 回答 2

8

而不是AlarmManager.ELAPSED_REALTIME_WAKEUP在 setRepeating() 方法中,使用AlarmManager.RTC_WAKEUP如下所示,

mgr.setRepeating(AlarmManager.RTC_WAKEUP,System.currentTimeMillis() + 1000, 1000, pi);
于 2012-11-16T08:13:27.767 回答
6

我google了很多,但似乎没有人遇到同样的问题。最后我发现我应该改用 SystemClock.elapsedRealtime() 。

对于 triggerAtMillis,因为类型是 AlarmManager.ELAPSED_REALTIME_WAKEUP 应该使用 SystemClock.elapsedRealtime() 而不是 System.currentTimeMillis()

问题已解决。

于 2012-11-16T08:10:39.890 回答