AlarmManager不会触发我的服务

时间:2017-07-13 19:54:18

标签: java android service alarmmanager utc

我将AlarmManager设置如下:

Intent startIntent =  new Intent(context, MyService.class);
PendingIntent pendingIntent = PendingIntent.getService(context, 0, startIntent, 0);
alarmManager.set(AlarmManager.RTC_WAKEUP, System.currentTimeMillis() + 3000, pendingIntent);
Log.d(TAG, "Current time is " + System.currentTimeMillis());
Log.d(TAG, "Next alarm time is: " + (alarmManager.getNextAlarmClock().getTriggerTime() - System.currentTimeMillis()));

它表明
当前时间是1499909678520
下次报警时间为:55521479

我认为RTC是使用System.currentTimeMillis()的UTC时间。下次报警应该是一个小于3000的数字吗?

仅供参考,在我的服务中,我这样处理:

@Override
public int onStartCommand(Intent intent, int flags, int startId) {
  Log.i(TAG, "MyService started");
}

我的服务永远不会开始。出了什么问题?

2 个答案:

答案 0 :(得分:0)

重复使用警报:

// Alarm time :: Current time
Calendar calendar = Calendar.getInstance() ;
calendar.setTimeInMillis(System.currentTimeMillis());
calendar.set(Calendar.SECOND, 0);

// Interval
long interval = 3000; // 3 seconds

alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), interval, pendingIntent);

代替:

alarmManager.set(AlarmManager.RTC_WAKEUP, System.currentTimeMillis() + 3000, pendingIntent);

确保您已在MyService中声明AndroidManifest.xml

答案 1 :(得分:0)

我在显示日志时犯了一个愚蠢的错误。所以,我的代码确实有效。但是,我想alarmManager.getNextAlarmClock()。getTriggerTime()不会返回UTC,导致与System.currentTimeMills()的区别。