Android глубокий сон и бодрствование
Я создал приложение для Android, которое отлично работает на всех телефонах. Но в моем телефоне Alcatel это не так, поскольку телефон переходит в режим глубокого сна, и сеть передачи данных выходит из строя, поэтому приложение не получает сеть передачи данных и не синхронизирует данные с сервера.
Мой дизайн...
SystemBootReceiver
-> (DataSyncService)Service
-> (MyBroadcastReceiver)BroadcastReceiver
-> (MyDataService)Service
,
Итак, здесь при загрузке системы я начинаю DataSyncService
где я настроил AlarmManager
(повторяется) и вызвать MyBroadcastRecever
, После вызова BroadcastRecever
я остановился DataSyncService
позвонив stopself()
,
Теперь MyBroadcastRecever
вызывает MyDataService
,
Я наткнулся на WakeLocks, которые, как говорится, не позволяют телефону переходить в режим глубокого сна. Так я реализовал это внутри MyDataService
onCreate()
метод
PowerManager pm = (PowerManager)
getSystemService(Context.POWER_SERVICE);
mWakeLock = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "My Tag");
mWakeLock.acquire();
А также release()
блокировка после остановки службы.
Я также установил разрешение в Android Manifest.
Но это не сработало. Поэтому для быстрой проверки я использовал приложение WAKE LOCK с маркета.
Но это также не разбудило телефон. Снова я наткнулся на приложение WAKE MY ANDROID (приложение удалено из магазина) с маркета и установил его... и тут произошло волшебство.
Он поддерживал телефон в живых.
Как описание в этом приложении говорит, что они также использовали Wake Lock
, Так чего же мне тогда не хватает?
Ошибка реализации или проблема дизайна?
1 ответ
Блокировка в вашем сервисе никогда не работает - потому что ваш сервис никогда не запускается
Хорошо - вы должны использовать WakefulIntentService - сделать ваш MyDataService
простираться WakefulIntentService
и в вашем приемнике вызова WakefulIntentService.doWakefulWork(context, MyDataService.class)
Или реализуйте статическую блокировку, разделяемую как вашим сервисом, так и получателем - что было бы сложно.
Если вы используете Wi-Fi, вам также нужно использовать WifiLock
- внутри вашего бодрствующего намерения - может быть сложно