这可能是因为在设置AlarmMgr时,用于计算触发时间的时间单位不是相对时间(例如,使用System.currentTimeMillis()返回的绝对时间而不是相对时间,如SystemClock.elapsedRealtime()返回的时间)。使用相对时间单位可以确保AlarmMgr在不同设备上同等稳定触发。
示例代码:以下是使用相对时间单位(SystemClock.elapsedRealtime())设置AlarmMgr的示例:
// 设置 AlarmMgr 在当前时间的1分钟后触发 AlarmManager alarmMgr = (AlarmManager) getSystemService(ALARM_SERVICE); Intent intent = new Intent(this, MyAlarmReceiver.class); PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 0, intent, 0); long triggerTime = SystemClock.elapsedRealtime() + 60 * 1000; alarmMgr.set(AlarmManager.ELAPSED_REALTIME_WAKEUP, triggerTime, pendingIntent); 注意,在使用相对时间单位时,将时间值设置为“相对时间 + 延迟时间”,以确保AlarmMgr在指定时间后触发。