我遇到了AlarmManager的问题。我可以用这段代码设置闹钟
private void setAlarm(long when) {
Intent intent = new Intent(NoteActivity.this, AlarmReceiver.class);
intent.putExtra("ID", note.getId());
AlarmManager manager = (AlarmManager)getSystemService(Context.ALARM_SERVICE);
manager.set(AlarmManager.ELAPSED_REALTIME_WAKEUP, when, PendingIntent.getBroadcast(NoteActivity.this, 1, intent, PendingIntent.FLAG_UPDATE_CURRENT));
Toast.makeText(getApplicationContext(),"Reminder set up", Toast.LENGTH_SHORT).show();
}
如果我设置long when = 5 * 1000; \\For example 5secs later
,但是如果我使用此代码
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
long selectedDate = date.getTime();
long timeSince1970 = System.currentTimeMillis();
long timeForAlarm = selectedDate - timeSince1970;
Intent intent = new Intent(NoteActivity.this, AlarmReceiver.class);
intent.putExtra("ID", note.getId());
AlarmManager manager = (AlarmManager)getSystemService(Context.ALARM_SERVICE);
manager.set(AlarmManager.ELAPSED_REALTIME_WAKEUP, timeForAlarm, PendingIntent.getBroadcast(NoteActivity.this, 1, intent, PendingIntent.FLAG_UPDATE_CURRENT));
Toast.makeText(getApplicationContext(),"Reminder set for "+calendar.getTime().toString(), Toast.LENGTH_SHORT).show();
我的闹钟在2秒后触发。我做错了什么? :/
我尝试了AlarmManager.ELAPSED_REALTIME_WAKEUP
和AlarmManager.RTC_WAKEUP
但没有改变。
请不要将我的问题视为重复。我找不到可以解决问题的东西。
答案 0 :(得分:2)
假设您在Android Studio中工作(如果没有 - 您必须切换),请在文本指针位于set
方法时点击 F1 并阅读AlarmManager::set的说明
注意:从API 19开始,传递给此方法的触发时间是 被视为不精确:在此时间之前不会发出警报, 但可能会推迟并在一段时间后交付。操作系统将使用 这个政策是为了在整个过程中“批处理”警报 系统,最大限度地减少设备需要“唤醒”的次数 并尽量减少电池使用。一般来说,警报安排在附近 只要警报安排在远期,将来不会推迟 将来
答案 1 :(得分:0)
而不是使用setExact
manager.setExact(AlarmManager.ELAPSED_REALTIME_WAKEUP, timeForAlarm, PendingIntent.getBroadcast(NoteActivity.this, 1, intent, PendingIntent.FLAG_UPDATE_CURRENT));