chr*_*ine 47 android alarmmanager android-6.0-marshmallow
API19上的AlarmManager具有setExact()方法来设置确切的警报.
确切意味着 - >如果我将闹钟设置为下午2:01,它将在下午2:01触发
在API 23 - Marhsmwallow(6.0)上有一个新方法setExactAndAllowWhileIdle(),但是作为参考,它不是EXACT,因为它只会每15分钟触发一次和低功耗空闲模式.
确切!=每15分钟:-)
那么如何在6.0中使用AlarmManager 实现精确报警?
如果用户添加一个提醒或日历约会,并希望在事件发生前10分钟通知应该显示报警前EXACT10分钟事件.使用setExactAndAllowWhileIdle()这似乎是不可能的.
参考链接:http: //developer.android.com/reference/android/app/AlarmManager.html#setExactAndAllowWhileIdle(int,long,android.app.PendingIntent)
Com*_*are 20
那么如何在6.0中使用AlarmManager实现精确报警?
欢迎您尝试setAlarmClock()
,因为AFAIK不受打盹模式的影响.否则,AlarmManager
对您来说不是一个可行的选择.即使您的应用程序使用电池优化白名单也无济于事,因为AlarmManager
行为不会因白名单而改变.
欢迎您使用GCM,因为高优先级消息应该为您提供提醒用户的机会.当然,这需要网络连接.
我所知道的唯一离线解决方案 - 我目前正在测试 - 是让用户将您的应用添加到电池优化白名单,然后使用前台服务(尝试保持您的流程),a ScheduledExecutorService
(用于定时)和部分WakeLock
(保持CPU开启).这将对用户的电池造成相当大的破坏.
即使在Doze空闲模式下,使用setExactAndAllowWhileIdle()进行一次性警报也会在给定时间内准确触发.所以这可能是要走的路.
如果你想以<15分钟的速度重复报警(或者在距离最后一个时间<15分钟的时间设置任何其他报警),问题就会开始,因为这在Doze空闲模式下不起作用,此类报警被强制执行到接下来的15分钟或在空转维护开始时执行,这在1小时后首先发生约10分钟,然后在2小时后再发生,然后又在4小时后发生,依此类推.
- 编辑 -
截至今天11月17日,Dianne Hackborn在本帖子的评论中写道:" 为了它的价值,空闲警报在相对较快的某个时间点变为9分钟之间的最短时间(即使在运行当前Marshmallow构建的设备上) . "
但这并没有从根本上改变任何事情.
以下是我在Google+上与Ian Lake的讨论!
setExactAndAllowWhileIdle()是准确的,应该可以工作.java doc中的15分钟时间框架是错误的.
归档时间: |
|
查看次数: |
16712 次 |
最近记录: |