一段时间后,AlarmManager未设置或未在Marshmallow上触发

时间:2016-06-03 06:27:10

标签: android alarmmanager android-6.0-marshmallow android-alarms android-doze

我已成功使用以下构造在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);

它没有任何改变。

在一些空闲时间之后,即使在棉花糖上也有可靠的方法来设置和触发警报吗?

1 个答案:

答案 0 :(得分:3)

当然,请尝试:

       setAlarmClock(AlarmManager.AlarmClockInfo info, PendingIntent operation)

如果您以这种方式设置闹钟,则不会启动打盹模式。我在控制台上对此进行了测试。

请勿忘记,警报时钟信息的PendingIntentsetAlarmclock不同。

更新

如果你想做一个简单的闹钟(不是闹钟)。

这必须工作

    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以触发对话框。   用户可以根据需要从白名单中手动删除应用程序。   在要求用户将您的应用添加到白名单之前,请确保该应用符合可接受的白名单用例。