我想设置一个每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以不执行?
答案 0 :(得分:2)
您没有告诉闹钟管理员在20秒内将警报设置为,然后每隔20秒,但现在,然后每20秒一次。这就是Android立即触发警报的原因 - 它可以捕获过去的警报,“现在”是代码完成后的几毫秒。您需要确保将来第一个预定的警报。
所以你真正需要的是:
alarmManager.setInexactRepeating(AlarmManager.ELAPSED_REALTIME, SystemClock.elapsedRealtime() + 20000, 20000, pendingIntent);
这告诉警报管理员在20秒内安排下一次警报,每20秒重复一次。