我认为这个问题在stackoverflow中被问及很多时间,但仍有那么多人努力解决它。打盹模式对我的应用程序至关重要
在我的android应用程序中,我必须每30分钟唤醒设备以获取当前位置并将其发送到服务器。为此,我使用了带有setExactAndAllowWhileIdle()方法和WakefulBroadcastReceiver的AlarmManager。它几乎可以在所有标准/流行设备上正常工作,但其他一些设备大多数中国设备不支持或不允许通过setExactAndAllowWhileIdle()从睡眠模式中唤醒设备。我已经在Moto G4 plus(Android OS 6.1)设备中测试过它,它不允许闹钟管理器在特定时间间隔内唤醒。
我使用AlarmManager调用wakefulBroadcastReceiver,它唤起wakefulIntentservice执行后台任务。但它的关键耗电量也在打盹模式(Nougat)中,它没有做后台任务。除此之外,它从后端服务捕获数据。
my code is here->>
// Setup periodic alarm every 30 minutes
if (android.os.Build.VERSION.SDK_INT >= 23) {
syncDbAlarmManager.setAndAllowWhileIdle(AlarmManager.ELAPSED_REALTIME_WAKEUP,
intervalMillis, pIntent);
} else if (android.os.Build.VERSION.SDK_INT >= 19
&& android.os.Build.VERSION.SDK_INT < 23){
syncDbAlarmManager.setInexactRepeating(AlarmManager.RTC_WAKEUP, triggerAtMillis/*firstMillis*/,
intervalMillis, pIntent);
} else {
syncDbAlarmManager.setRepeating(AlarmManager.RTC_WAKEUP, triggerAtMillis/*firstMillis*/,
intervalMillis, pIntent);
}
我已经使用电源管理器也 - >
PowerManager powerManager = (PowerManager) context.getSystemService(POWER_SERVICE);
PowerManager.WakeLock wakeLock = powerManager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK,
"com.example.johnbravado");
wakeLock.acquire();
// Do Work
MyConstants.getInstance().msgReqAction(intent.getIntExtra(MyConstants.BROADCAST_DATA_REQ, 0));
wakeLock.release();
但它耗电过多,甚至在睡眠(打盹)模式后无法工作。 @FabioC –
不,我不释放wakeLock。默认情况下,进入睡眠模式后根本不会触发服务。 –