Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/211.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android AlarmManager未设置或在特定时间后未对棉花糖开火_Android_Alarmmanager_Android 6.0 Marshmallow_Android Alarms_Android Doze - Fatal编程技术网

Android AlarmManager未设置或在特定时间后未对棉花糖开火

Android AlarmManager未设置或在特定时间后未对棉花糖开火,android,alarmmanager,android-6.0-marshmallow,android-alarms,android-doze,Android,Alarmmanager,Android 6.0 Marshmallow,Android Alarms,Android Doze,我已成功使用以下构造在Android 5之前的一些应用程序中启动AlarmManager: Intent serviceIntent = new Intent(context, MyService.class); PendingIntent pi = PendingIntent.getService(context, alarmId, serviceIntent, PendingIntent.FLAG_UPDATE_CURRENT); DateT

我已成功使用以下构造在Android 5之前的一些应用程序中启动AlarmManager:

    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);
但由于棉花糖,AlarmManager要么没有设置,要么在一段空闲时间后不再启动。似乎当前运行的报警会再次触发,但不会设置新的报警

我读了一些文档,很可能是关于棉花糖打瞌睡的。因此,我实现了以下内容(并检查它是否正在实际执行):

这不会改变任何事情

即使在棉花糖闲置一段时间后,是否有可靠的方法设置和触发警报?

当然,可以尝试以下方法:

       setAlarmClock(AlarmManager.AlarmClockInfo info, PendingIntent operation)
如果你这样设置闹钟,打瞌睡模式不会启动。我在控制台上测试了这个

别忘了AlarmClock信息有一个与设置AlarmClock不同的
PendingEvent

更新

如果你想制作一个简单的闹钟(不是闹钟)

这一定行得通

    setExactAndAllowWhileIdle(int type, long triggerAtMillis, PendingIntent operation)
但我现在知道它不是。所以我开始搜索谷歌,我发现了这个。将应用程序添加到doze白名单的可能方法。也许
setExactAndAllowHileidle
可以工作

用户可以在设置>电池>电池优化中手动配置白名单。或者,该系统为应用程序提供方法,要求用户将其列入白名单

应用程序可以启动操作\u忽略\u电池\u优化\u设置,目的是让用户直接进入电池优化,在那里他们可以添加应用程序。 持有REQUEST\u IGNORE\u BATTERY\u OPTIMIZATIONS权限的应用程序可以触发一个系统对话框,允许用户直接将应用程序添加到白名单,而无需进入设置。该应用程序触发一个动作请求、忽略、电池优化,以触发该对话框。 用户可以根据需要手动从白名单中删除应用。 在要求用户将您的应用程序添加到白名单之前,请确保该应用程序与白名单的可接受用例相匹配


+1因为它似乎在起作用。。。然而,我不喜欢这样一个事实,即即使没有设置正常的“唤醒”闹钟,它也会永远保持顶部状态栏中的闹钟符号:-(尽管我不太喜欢它,但它似乎是正确的答案。我注意到一个缺陷(至少在我的LG G5安卓6.0.1上):我的应用程序正确识别
PowerManager\isIgnoringBatteryOptimizations
,但是android doze优化异常设置没有显示正确的状态。我必须切换两次才能再次关闭异常OK,我注意到的缺陷实际上是一个已知问题
    setExactAndAllowWhileIdle(int type, long triggerAtMillis, PendingIntent operation)