【问题标题】:AlarmManager not triggering repeated alarm on proper timeAlarmManager 不会在适当的时间触发重复警报
【发布时间】:2019-05-30 03:34:36
【问题描述】:

我正在为 Android LollipopKitKat 设备开发应用程序。应用程序需要在每个预定义的时间间隔(基于从服务器接收到的时间间隔)调用 API。我正在使用AlarmManager 类来执行此操作。 但问题是它工作到一段时间然后停止。

例如,如果我设置在上午 08:00 以 30 分钟的间隔启动闹钟,它会一直工作到上午 11:00(aprx),然后闹钟不会触发。

如果我设置了一个较长的时间间隔(例如:从当前时间开始 8 小时,仍然会发生同样的问题,甚至一次都不会重新启动)

代码

public void setRepeatedAlarm(Context context, int requestCode, long next, long interval, Intent intent) {
   PendingIntent sender = PendingIntent.getBroadcast(context, requestCode, intent, PendingIntent.FLAG_UPDATE_CURRENT);
   AlarmManager am = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
   am.setRepeating(AlarmManager.RTC_WAKEUP, next, interval, sender);
}

函数调用

AlarmHandleManager.get().setRepeatedAlarm(this, Constants.SchedulerRequestCodes.UPLOAD_LOG, date.getTime(), AlarmManager.INTERVAL_DAY, intent);

如果有人能解决这个问题,请告诉我。 在 Google 错误跟踪器中看到棒棒糖报告的错误,如果是这种情况,请告诉我是否有任何替代解决方案。

【问题讨论】:

    标签: android alarmmanager android-5.0-lollipop android-4.4-kitkat repeatingalarm


    【解决方案1】:

    我不认为这是一个错误,因为它已经在官方documentation 中提到过

    注意:从 API 19 开始,所有重复警报都是不准确的。由于此方法从 API 3 开始可用,因此您的应用程序可以安全地调用它,并确保它在当前和旧版本的 Android 上都能获得类似的行为。

    注意:从 API 19 开始,所有重复警报都是不准确的。如果您的应用程序需要精确的交付时间,那么它必须使用一次性精确警报,并如上所述重新安排每次。 targetSdkVersion 早于 API 19 的旧版应用程序将继续将其所有警报(包括重复警报)视为准确。

    注意:从 API 19 (Build.VERSION_CODES.KITKAT) 开始,警报传递是不准确的:操作系统将切换警报以最大程度地减少唤醒和电池使用。有新的 API 来支持需要严格交付保证的应用程序;参见 setWindow(int, long, long, android.app.PendingIntent) 和 setExact(int, long, android.app.PendingIntent)。 targetSdkVersion 早于 API 19 的应用程序将继续看到以前的行为,即所有警报都在请求时准确传递。

    【讨论】:

    • 根据 API 19 中的文档“警报传递不准确”。但就我而言,它甚至没有触发。
    • 是的,但它说重复
    猜你喜欢
    • 1970-01-01
    • 2014-02-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-07
    相关资源
    最近更新 更多