我已经设置闹钟(在我们正在开发的闹钟应用中)8:58(24小时格式)。
警报未触发 - 警报图标仍处于状态栏 - 当我写adb shell dumpsys alarm
时,我可以看到:
Batch{6b33bdb num=1 start=99803288 end=99803288 flgs=0x3}:
RTC_WAKEUP #0: Alarm{3e3da2e type 0 when 1484078280736 my.app}
tag=*walarm*:my.app/md5f98255d9820be5cc9672d0645bf1ca12.RingBroadcastReceiver
type=0 whenElapsed=+11h1m53s125ms when=2017-01-10 20:58:00
window=0 repeatInterval=0 count=0 flags=0x3
Alarm clock:
triggerTime=2017-01-10 08:58:00
showIntent=PendingIntent{21219cf: PendingIntentRecord{aac3f5c my.app startActivity}}
operation=PendingIntent{ecde88f: PendingIntentRecord{821c71c my.app broadcastIntent}}
Next wake from idle: Alarm{3e3da2e type 0 when 1484078280736 my.app}
tag=*walarm*:my.app/md5f98255d9820be5cc9672d0645bf1ca12.RingBroadcastReceiver
type=0 whenElapsed=+11h1m53s125ms when=2017-01-10 20:58:00
window=0 repeatInterval=0 count=0 flags=0x3
Alarm clock:
triggerTime=2017-01-10 08:58:00
showIntent=PendingIntent{21219cf: PendingIntentRecord{aac3f5c my.app startActivity}}
operation=PendingIntent{ecde88f: PendingIntentRecord{821c71c my.app broadcastIntent}}
问题是:在when
之后12小时triggerTime
怎么可能?
似乎是12/24小时格式问题,但我的设备以及我的应用和时间选择器都设置为24小时格式。这个问题只发生过一次。当我设置新警报时,它会按预期工作。
有什么想法吗?
更新
我们正在使用此代码来设置警报(抱歉Xamarin语法),我已经测试了alarmEntity正在返回正确的时间。问题必须在这个代码或设备/ android /系统的东西。从triggerTime=2017-01-10 08:58:00
我觉得代码没问题,系统或报警管理器也存在问题。
DateTime closestTrigger = alarmEntity.GetTime();
Calendar calendar = Calendar.Instance;
calendar.Set(CalendarField.Year, closestTrigger.Year);
calendar.Set(CalendarField.Month, closestTrigger.Month - 1);
calendar.Set(CalendarField.DayOfMonth, closestTrigger.Day);
calendar.Set(CalendarField.HourOfDay, closestTrigger.Hour);
calendar.Set(CalendarField.Minute, closestTrigger.Minute);
calendar.Set(CalendarField.Second, closestTrigger.Second);
var alarmInfo = new AlarmManager.AlarmClockInfo(calendar.TimeInMillis, mainPendingIntent);
manager.SetAlarmClock(alarmInfo, ringPendingIntent);
更新2: 我在同一个dumpsys警报日志中找到了一条更重要的行:
Next alarm clock information:
user:0 pendingSend:false time:1484035080736 = 2017-01-10 08:58:00 = -58m6s876ms
..这意味着错过了警报,但系统甚至没有试图呈现它,logcat在8:58附近没有显示任何活动。并且仍然不清楚为什么系统会将闹钟重新安排到20:58。