每当我的Fragement创建时,我应该在哪里/如何启动AlarmManager以不执行?

时间:2016-10-26 10:42:26

标签: android notifications alarmmanager intentservice

我想设置一个每20秒触发一次的通知。我在片段中的onCreate()方法中设置了一个AlarmReceiver:

        Intent alarmIntent = new Intent(getActivity(), IntentService.AlarmReceiver.class);
        pendingIntent = PendingIntent.getBroadcast(getContext(), 0, alarmIntent, PendingIntent.FLAG_UPDATE_CURRENT);

        alarmManager = (AlarmManager) getActivity().getSystemService(Context.ALARM_SERVICE);
        alarmManager.setInexactRepeating(AlarmManager.ELAPSED_REALTIME, SystemClock.elapsedRealtime(), 20000, pendingIntent);

在我的IntentService类中,我有以下静态类:

  public static class AlarmReceiver extends BroadcastReceiver {

        @Override
        public void onReceive(Context context, Intent intent) {

            Intent send = new Intent(context, IntentService.class);
            context.startService(send);
       }
    }

我想在上面开始的IntentService类中创建我的通知。

AlarmManager工作,并且每20秒执行一次,但每次创建Fragment时也会触发它。

我的问题是:在我的Fragement创建时,我应该在何处/如何启动AlarmManager以不执行?

1 个答案:

答案 0 :(得分:2)

您没有告诉闹钟管理员在20秒内将警报设置为,然后每隔20秒,但现在,然后每20秒一次。这就是Android立即触发警报的原因 - 它可以捕获过去的警报,“现在”是代码完成后的几毫秒。您需要确保将来第一个预定的警报。

所以你真正需要的是:

alarmManager.setInexactRepeating(AlarmManager.ELAPSED_REALTIME, SystemClock.elapsedRealtime() + 20000, 20000, pendingIntent);

这告诉警报管理员在20秒内安排下一次警报,每20秒重复一次。