问题:基于UnixTimestamp设置警报

时间:2019-07-19 15:55:24

标签: java android alarmmanager unix-timestamp

我正在尝试基于UnixTimestamp设置警报,但是应用程序总是在设置时间之前发送警报,例如,我在1563551362上设置了警报,现在的问题是我没有在1563551362上收到警报,但是我收到了警报在我设置它之前,有人可以帮忙吗?

我尝试了以下代码来设置警报:

private void setNotificationAlarm(long unixTimeStamp){
    AlarmManager alarmManager = (AlarmManager) getContext().getSystemService(ALARM_SERVICE);
    Intent intent = new Intent(getContext(), broadcastReciever.class);
    PendingIntent pendingIntent = PendingIntent.getBroadcast(getContext(), 0, intent, 0);
    alarmManager.set(AlarmManager.RTC_WAKEUP, broadcastReciever, pendingIntent);

}

1 个答案:

答案 0 :(得分:0)

来自API

  

从API 19(Build.VERSION_CODES.KITKAT)开始,警报传递是   不精确:操作系统将转移警报,以最大程度地减少唤醒和   电池使用。有新的API支持需要的应用程序   严格的交货保证;参见setWindow(int,long,long,   android.app.PendingIntent)和setExact(int,long,   android.app.PendingIntent)。 targetSdkVersion为   API 19之前的版本将继续在中看到以前的行为   

因此您可以使用:

alarmManager.setExact(AlarmManager.RTC_WAKEUP, unixTimeStamp, pendingIntent);

但是API警告:

  

仅对精确时间交付有强烈需求的警报   (例如闹钟在要求的时间响起)   安排准确。强烈建议不要使用应用程序   不必要的精确警报,因为它们降低了操作系统的最小化能力   电池使用