AlarmManager 不会触发我的服务
AlarmManager doesn't trigger to my service
我将 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");
}
我的服务从未启动。怎么了?
重复闹钟使用:
// 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);
确保您已在 AndroidManifest.xml
中声明 MyService
。
我在显示日志时犯了一个愚蠢的错误。所以,我的代码确实有效。但是,我想 alarmManager.getNextAlarmClock().getTriggerTime() 在 UTC 中不会 return,这会导致 System.currentTimeMills().
的差异
我将 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");
}
我的服务从未启动。怎么了?
重复闹钟使用:
// 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);
确保您已在 AndroidManifest.xml
中声明 MyService
。
我在显示日志时犯了一个愚蠢的错误。所以,我的代码确实有效。但是,我想 alarmManager.getNextAlarmClock().getTriggerTime() 在 UTC 中不会 return,这会导致 System.currentTimeMills().
的差异