【问题标题】:setExact method call skipped. Alarms not being fired as expected跳过 setExact 方法调用。警报未按预期触发
【发布时间】:2016-07-04 19:15:08
【问题描述】:

我正在尝试使用 AlarmManager 为通知设置警报。当用户选择一个列表项时会设置警报,因此我尝试在每次选择列表项时设置一个单独的警报(将唯一 ID 传递到 pendingIntent)。

用于设置闹钟的代码:

public static void setAlarm(Context context, Movie movie, Schedule schedule){
    Intent arg = new Intent(context, NotifyService.class);
    arg.putExtra(NotificationHelper.fetch_schedule_id, schedule.getId());
    arg.putExtra(NotificationHelper.fetch_movie_id, movie.getId());
    PendingIntent pendingIntent = PendingIntent.getService(context.getApplicationContext(), (int) schedule.getId(), arg, PendingIntent.FLAG_CANCEL_CURRENT);
    AlarmManager am = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT)
        am.setExact(AlarmManager.RTC_WAKEUP, schedule.getStart().getTime(), pendingIntent);
    else
        am.set(AlarmManager.RTC_WAKEUP, schedule.getStart().getTime(), pendingIntent);
}

我正在处理的问题是有时不执行对 set(或 setExact)方法的调用。它确实工作了一半,但在特定情况下,例如,当用户在不到一秒的时间内一个接一个地点击两个或多个列表项时,则只执行第一个调用,其余调用将被忽略。

此外,由于 set/setexact 方法返回 void,因此如果调用了该方法并设置了警报,我将无法调试。现在我必须每次都检查 adb shell dumpsys 警报

因此,如果有人可以告诉我如何安排警报以便每次都触发它,无论该方法被调用的频率如何,甚至可以引导我朝着正确的方向前进,这都会有很大的帮助。 :)

【问题讨论】:

    标签: android notifications alarmmanager


    【解决方案1】:

    首先,我假设您将此代码用于 Lollipop 及更高版本的三星设备。在这种情况下,我遇到了同样的问题,经过大量搜索和解决方法后,我认为 Lollipop 及更高版本的三星设备智能管理器可能是问题所在。该组件可以延迟警报管理器关闭,它会在 3 分钟后触发,如果手机正在使用电池并且屏幕关闭,否则警报管理器运行良好,这就是为什么您会看到这些方法有时不会执行。当然,您可以为特定应用停用智能管理器。

    1. 在设备上启动 Samsung Smart Manager 应用程序
    2. 点击电池
    3. 点击应用优化
    4. 列表项
    5. 点击应用优化详情
    6. 找到你的APP选择“禁用”

    但在我的情况下,它不起作用,禁用智能管理器在 2 台带有 Lollipop 的三星设备中也不起作用。起作用的是通过重构我的应用程序包的名称以包含字符串“alert”或“alarm”来“欺骗”智能管理器,例如 com.example.alarm.myApplication。您也可以参考此link 了解更多信息。

    【讨论】:

    • 实际上这个问题不是特定于设备的。我已经在许多设备上测试了该应用程序,但仍然面临这个错误。对于我描述的用例,警报根本不会响起。
    • 好吧,也许你有一个不同的错误,虽然你会遇到我描述的错误。另外,能否附上更多代码;
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-10
    • 1970-01-01
    • 1970-01-01
    • 2017-05-13
    相关资源
    最近更新 更多