如何阻止警报管理器覆盖我的请求

时间:2016-03-21 17:18:02

标签: android broadcastreceiver alarmmanager android-pendingintent

警报管理器现在给我以下消息,可能是因为我开始使用API​​ 23。

03-21 13:00:03.828 754-2170 / system_process W / AlarmManager:可疑短距离5000毫米;扩展到60秒

我要求每个要求的规格间隔5000毫秒。当我在BroadCastReceiver中告诉它5000毫秒时,你怎么告诉它不要把它扩展到60秒?即

private static final long defaultPERIOD = 5000;
    @Override
public void onReceive(Context ctxt, Intent i) {
    context = ctxt;

    scheduleAlarms(ctxt, (long) defaultPERIOD, true);

}

public static void scheduleAlarms(Context ctxt, Long duration, Boolean bactive) {


    Log.e("FiveSecondReceivr", "scheduleAlarms duraton: "+duration);
    AlarmManager mgr = (AlarmManager) ctxt
            .getSystemService(Context.ALARM_SERVICE);
    Intent i = new Intent(ctxt, FiveSecondSchedule.class);
    PendingIntent pi = PendingIntent.getService(ctxt, 0, i, 0);

    mgr.setInexactRepeating(AlarmManager.ELAPSED_REALTIME,
            SystemClock.elapsedRealtime() + duration, duration, pi);


    if (bactive == false) {
        mgr.cancel(pi);
    }

}

1 个答案:

答案 0 :(得分:1)

  

警报管理器现在给我以下消息,可能是因为我开始使用API​​ 23。

不,that has been the behavior since API Level 21 (Android 5.1)

  

当我在BroadCastReceiver中告诉它5000毫秒时,你怎么告诉它不要把它扩展到60秒?

不要使用“重复”系列方法。使用setExact()来控制您的工作地点并再次致电setExact()。这允许您降低到5000毫秒(尽管不低,并且该规则可能会在未来的Android版本中更改)。