So how can I achieve an exact alarm with AlarmManager in 6.0?
You are welcome to try setAlarmClock()
, as AFAIK it is unaffected by Doze mode. Otherwise, AlarmManager
is not a viable option for you. Even having your app on the battery optimization whitelist will not help, as AlarmManager
behavior does not change based on the whitelist.
You are welcome to use GCM, as a high-priority message should give you an opportunity to alert the user. This, of course, requires network connectivity.
The only offline solution that I am aware of — and that I am presently testing — is to have the user add your app to the battery optimization whitelist, then use a foreground service (to try to keep your process around), a ScheduledExecutorService
(for the timing), and a partial WakeLock
(to keep the CPU on). This will be fairly devastating to the user's battery.
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…