API23 打盹模式會干擾 AlarmManager
Android 6(API23)
引入了干擾 AlarmManager 的 Doze 模式。它使用某些維護視窗來處理警報,因此即使你使用了 setExactAndAllowWhileIdle()
,也無法確保警報在所需的時間點觸發。
你可以使用手機設定(Settings/General/Battery & power saving/Battery usage/Ignore optimizations
或類似設定)為你的應用關閉此功能
在你的應用內,你可以檢查此設定…
String packageName = getPackageName();
PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
if (pm.isIgnoringBatteryOptimizations(packageName)) {
// your app is ignoring Doze battery optimization
}
…並最終顯示相應的設定對話方塊:
Intent intent = new Intent();
String packageName = getPackageName();
PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
intent.setAction(Settings.ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS);
intent.setData(Uri.parse("package:" + packageName));
startActivity(intent);