我已成功使用以下构造在Android 5的某些应用程序中启动AlarmManager:
id
reputation
displayname
loc
age
但是从Marshmallow开始,AlarmManager要么没有设置,要么在空闲时间之后不再触发。似乎当前正在运行的警报再次发出警报,但之后不会设置新的警报。
我阅读了一些文档,它最有可能是关于Marshmallow Doze。所以我实现了以下内容(并检查它实际上是否正在执行):
Intent serviceIntent = new Intent(context, MyService.class);
PendingIntent pi = PendingIntent.getService(context, alarmId, serviceIntent,
PendingIntent.FLAG_UPDATE_CURRENT);
DateTime inMinutes = (new DateTime()).plusMinutes(60);
AlarmManager am = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
am.set(AlarmManager.RTC_WAKEUP, inMinutes.getMillis(), pi);
它没有任何改变。
在一些空闲时间之后,即使在棉花糖上也有可靠的方法来设置和触发警报吗?
答案 0 :(得分:3)
当然,请尝试:
setAlarmClock(AlarmManager.AlarmClockInfo info, PendingIntent operation)
如果您以这种方式设置闹钟,则不会启动打盹模式。我在控制台上对此进行了测试。
请勿忘记,警报时钟信息的PendingIntent
与setAlarmclock
不同。
更新
如果你想做一个简单的闹钟(不是闹钟)。
这必须工作
setExactAndAllowWhileIdle(int type, long triggerAtMillis, PendingIntent operation)
但我现在却没有。所以我开始寻找和谷歌,我发现了这一点。添加应用程序打开白名单的可能方法。也许setExactAndAllowWhileIdle
有效。
https://developer.android.com/training/monitoring-device-state/doze-standby.html?hl=es
用户可以在设置>中手动配置白名单。电池>电池优化。或者,系统为应用程序提供了让用户将其列入白名单的方法。
应用程序可以触发ACTION_IGNORE_BATTERY_OPTIMIZATION_SETTINGS意图,将用户直接带到Battery Optimization,在那里他们可以添加应用程序。 拥有REQUEST_IGNORE_BATTERY_OPTIMIZATIONS权限的应用可以触发系统对话框,让用户直接将应用添加到白名单,而无需进行设置。该应用程序触发ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS Intent以触发对话框。 用户可以根据需要从白名单中手动删除应用程序。 在要求用户将您的应用添加到白名单之前,请确保该应用符合可接受的白名单用例。