Android AlarmManager使用SetExactAndAllowHileId使其重复

Android AlarmManager使用SetExactAndAllowHileId使其重复,android,alarm,Android,Alarm,我有一个应用程序,它使用AlarmManager来安排服务以设定的频率重复,比如说每小时 从Android 6开始,设备将进入睡眠模式,该模式忽略wakelock和警报,可能在维护窗口中运行它们。我更希望警报在计划时执行,即使设备处于低功耗空闲模式 我知道我可以使用SetExactAndAllowHileidle在Doze中执行警报,但这只会执行一次。我看不到任何方法具有此功能,但将以设定的频率重复 例如,我使用下面的代码每小时触发一次警报。有没有一种方法可以使用setExactAndAllow

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

从Android 6开始,设备将进入睡眠模式,该模式忽略wakelock和警报,可能在维护窗口中运行它们。我更希望警报在计划时执行,即使设备处于低功耗空闲模式

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

例如,我使用下面的代码每小时触发一次警报。有没有一种方法可以使用setExactAndAllowHileId使其重复

                             // 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);
行政

作为
跟踪LarmReceiver
中工作的一部分,您可以调用
setExactAndAllowHileId()
来安排下一部分工作


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

我认为在使用DOZE和
SetExactAndAllowHilleidle
时,您需要在每个触发器上重新安排它。这只是一个假设。考虑到这一点,Mark,我的MDM/EMM系统大约有8项服务,它们安排在相隔10分钟左右的不同时间。客户将选择他们希望这些服务与MDM同步设备的频率。老实说,我认为可能会出现这样的情况:一个警报已经执行,然后6分钟后又出现另一个警报。正如文件所说,9分钟后才能执行另一个警报。我认为也许更好的方法是让MDM通过计时器向设备发送推送。这将ping请求同步的设备。你认为呢?另一种方法是让代码保持原样(使用setRepeating),让Android将功能推迟到维护窗口?@turtleboy:“我认为也许更好的方法是让MDM通过计时器向设备发送推送。这会ping设备请求同步。你认为呢?”——技术上,这是可能的。它有一系列的要求(互联网接入,服务器团队愿意设置,等等),所以我不知道它是否适合您的情况。“另一种方法是让代码保持原样(使用setRepeating),让Android将功能推迟到维护窗口?”-当然,或者使用
JobScheduler
,但计时可能会非常零散。好的,谢谢,我已经完成了MDM,已经花了2.5年时间。它使用了你几年前向我推荐的KnoxAPI。实现了2500个api调用和500个推送通知,下周将与一家公司进行测试:)另一个推送通知不会影响同步。再次感谢