【问题标题】:Issue: Set Alarm Based on UnixTimestamp问题:根据 UnixTimestamp 设置警报
【发布时间】:2019-07-19 15:55:24
【问题描述】:

我正在尝试根据 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);

}

【问题讨论】:

  • 只是猜测(因为从问题中不清楚),您是否混淆了自纪元以来的毫秒和秒?如果您调用的方法需要毫秒并且您传递了 1563551362(秒),它将被理解为 1970 年 1 月 19 日 02:19:11.362 UTC。这可能会导致警报立即触发。

标签: java android alarmmanager unix-timestamp


【解决方案1】:

来自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 警告说:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-31
    • 1970-01-01
    • 2020-09-27
    • 1970-01-01
    • 2016-06-16
    • 1970-01-01
    相关资源
    最近更新 更多