AlarmManager使用setExactAndAllowWhileIdle重复它

时间:2018-01-19 10:55:22

标签: android alarm

我有一个应用程序,它使用AlarmManager来安排服务以设定的频率重复,比如每小时一次。

从Android 6开始,设备将进入打盹模式,此模式会忽略唤醒锁和警报,可能会在维护窗口中运行它们。我希望即使设备处于低功耗空闲模式,它也会在预定时执行。

我知道我可以使用setExactAndAllowWhileIdle在Doze中执行警报,但这只会执行一次。我看不到任何具有此功能的方法,但会以设定的频率重复。

例如,我使用下面的代码每小时发出一次警报。有没有办法使用setExactAndAllowWhileIdle重复?

                             // get a Calendar object with current time
                             Calendar cal2 = Calendar.getInstance();
                             // add 5 minutes to the calendar object
                             cal2.add(Calendar.MINUTE, 1);
                             Intent intentTracking = new Intent(getApplicationContext(), TrackingAlarmReceiver.class);

                             // In reality, you would want to have a static variable for the request code instead of 192837
                             PendingIntent sender3 = PendingIntent.getBroadcast(getApplicationContext(), 192839, intentTracking, PendingIntent.FLAG_UPDATE_CURRENT);

                             // Get the AlarmManager service
                             AlarmManager am3 = (AlarmManager) getSystemService(ALARM_SERVICE);
                             //am.set(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), sender);


                             am3.setRepeating(AlarmManager.RTC_WAKEUP, cal2.getTimeInMillis(), ((Integer.parseInt(carerTrackingInteval)) * 60000 ), sender3);

1 个答案:

答案 0 :(得分:1)

ADM is spot-on

作为TrackingAlarmReceiver中工作的一部分,您可以致电setExactAndAllowWhileIdle()安排下一步的工作。

请记住,此类事件的最小粒度为~10分钟IIRC,即使您获得控制权,也可能无法访问网络。