将服务设置为在特定时间关闭时,我使用 AlarmManager 系统服务。一切顺利,服务被调用并采取行动。
当达到闹钟时间时,服务启动,此时我得到系统时间(System.currentTimeMillis())。我猜这不会是服务启动的实际时间。有没有办法获得为此 PendingIntent 设置的时间?
IE
设置早上 9 点的闹钟。
DoStuffService 早上 9 点开始。
DoStuffService 知道它应该在上午 9 点开始,并将此值用于未来的功能。
将服务设置为在特定时间关闭时,我使用 AlarmManager 系统服务。一切顺利,服务被调用并采取行动。
当达到闹钟时间时,服务启动,此时我得到系统时间(System.currentTimeMillis())。我猜这不会是服务启动的实际时间。有没有办法获得为此 PendingIntent 设置的时间?
IE
设置早上 9 点的闹钟。
DoStuffService 早上 9 点开始。
DoStuffService 知道它应该在上午 9 点开始,并将此值用于未来的功能。
当您为警报创建意图时,您可以将额外的数据(包括警报时间)放入其中,如下所示:
Intent intent = new Intent("action name");
//put extra data into the intent:
intent.putExtra("alarm_time_hours", hours);
intent.putExtra("alarm_time_minutes", minutes);
PendingIntent sender = PendingIntent.getBroadcast(getApplicationContext(), 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
AlarmManager am = (AlarmManager) getSystemService(ALARM_SERVICE);
am.set(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), sender);
然后在您的接收器或服务中,您需要从接收到的意图中获取这些额外数据。使用这样的东西:
Bundle bundle = intent.getExtras();
if(bundle.containsKey("alarm_time_hours")) {
int hours = bundle.getInt("alarm_time_hours");
}
if(bundle.containsKey("alarm_time_minutes")) {
int minutes = bundle.getInt("alarm_time_minutes");
}
有没有办法获得为此 PendingIntent 设置的时间?
不,对不起。
但是,您自己确定它应该不是非常困难。按照您的示例,如果您的服务报告现在是 09:00:02.36,您应该能够向下舍入以确定这是上午 9 点的警报。