Я реализую приложение, которое слушает и выполняет действия, когда пользователь встряхивает телефон.
Поэтому я реализовал следующую службу:
public class ShakeMonitorService extends Service {
...
ShakeDetector shakeDetector;
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
shakeDetector= new ShakeDetector(this);
shakeDetector.start();
....
startForeground(MY_ID, myNotification);
return Service.START_STICKY;
}
...
}
и запустил службу в MainActivityonCreate
ContextCompat.startForegroundService(this,
new Intent(this, ShakeMonitorService.class));
В shakeDetector я прослушиваю события датчика для акселерометра, как описано здесь .
Он работает правильно на моих устройствах, но некоторые пользователи сообщают, что он работаетпока они не заблокируют свои устройства в течение длительного времени (то есть 3 часа).С этого момента приложение перестает обнаруживать жесты дрожания даже при использовании устройства (экран включен), пока приложение не запустится снова.
Что происходит?Я предположил, что Android убивает или приостанавливает приложение и останавливает службу до тех пор, пока она не будет снова открыта.
Как мне избежать этого?
Важное примечание: я не хочу избегать входа в системув спящем режиме, но я хочу восстановить выполнение, когда система выйдет из спящего режима.