我正在尝试在一天中的特定时间(上午12点解雇接收器,但有时会在1点或2点解雇。
我在服务中添加了一条通知,以了解接收器何时确切开始发出警报,然后我发现它开始于1点或2点甚至3点,而不是我调整的时间。
calendar = Calendar.getInstance();
calendar.setTimeInMillis(System.currentTimeMillis());
calendar.set(Calendar.HOUR_OF_DAY,0);
calendar.set(Calendar.MINUTE,0);
calendar.set(Calendar.SECOND,0);
Intent intent = new Intent(getActivity(), PrefAlarm.class);
long firstMillis = System.currentTimeMillis();
alarm = (AlarmManager) getActivity().getSystemService(getActivity().ALARM_SERVICE);
pIntent = PendingIntent.getBroadcast(getActivity(), PrefAlarm.REQUEST_CODE2,intent ,PendingIntent.FLAG_CANCEL_CURRENT);
alarm.setInexactRepeating(AlarmManager.RTC_WAKEUP,calendar.getTimeInMillis( ),AlarmManager.INTERVAL_DAY,pIntent);
如果使用setInexactRepeating()
,则它触发的时间为inexact。这意味着Android可以调整触发时间以节省电池电量(通常通过延迟触发直到设备苏醒)。阅读有关AlarmManager
和JobScheduler
的文档以及有关如何获得应用程序所需行为的文档。