2012-09-14 3 views
1

Я создал приложение для Android, которое отлично работает во всех телефонах. Но в моем телефоне Alcatel это происходит не так, как телефон переходит в глубокий спящий режим, и сеть данных терпит неудачу, поэтому приложение не получает сеть передачи данных и не синхронизирует данные с сервера.Android с глубоким сном и замками после пробуждения


My Design ...

SystemBootReceiver ->(DataSyncService)Service ->(MyBroadcastReceiver)BroadcastReceiver ->(MyDataService)Service.

Итак, здесь, при загрузке системы, я запускаю DataSyncService, где я установил AlarmManager (повторил) и позвонил MyBroadcastRecever. После звонка BroadcastRecever я останавливаю DataSyncService по телефону stopself().

Теперь MyBroadcastRecever называет MyDataService.


Я столкнулся с WakeLocks, который, как сказано, предотвращает переезд телефона в глубокий спящий режим. Так я реализовал его в MyDataServiceonCreate() метод

PowerManager pm = (PowerManager) 
        getSystemService(Context.POWER_SERVICE); 
mWakeLock = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "My Tag"); 
mWakeLock.acquire(); 

И release() замок бодрствование перед остановкой службы.

Я также установил разрешение в манифесте android.

Но это не помогло. Поэтому для быстрой проверки я использовал приложение WAKE LOCK с рынка.

Но это также не разбудило телефон. Снова я наткнулся на приложение WAKE MY ANDROID (приложение, удаленное из магазина) с рынка и установил его .. и здесь произошло волшебство.

Он сохранил телефон в живых.

В описании этого приложения говорится, что они также использовали Wake Lock. Так что же мне тогда не хватает?

Есть ли ошибка внедрения или проблема с дизайном?

+0

Может быть, вы могли бы попробовать [ACQUIRE_CAUSES_WAKEUP] (http://developer.android.com/reference /android/os/PowerManager.html#ACQUIRE_CAUSES_WAKEUP) с помощью SCREEN_DIM_WAKE_LOCK –

+0

Можете уточнить причину? Проблема в том, что сетевые запросы терпят неудачу, когда приложение запускается после пробуждения устройства? – satur9nine

+0

Вы решили проблему? –

ответ

3

Замок у вас есть в вашей службе никогда не заканчивается - вызвать ваш сервис не запуская

Ну - вы должны использовать WakefulIntentService - сделать свой MyDataService продлить WakefulIntentService и в вызове приемника WakefulIntentService.doWakefulWork(context, MyDataService.class)

Или реализовать статический замок, разделяемый как вашим сервисом, так и получателем - что было бы сложно.

При использовании Wi-Fi, вы должны также должны использовать WifiLock - внутри вашего бодрствующего намерения службы - может получить сложно

+0

Я думаю, что искатель указал, что их служба действительно работает, но есть сетевая ошибка. – satur9nine

+0

@ satur9nine: «Но в моем телефоне Alcatel это не так, как телефон переходит в глубокий спящий режим ...» - пожалуйста, верните –

+0

Mr_and_Mrs_D: «Но в моем телефоне Alcatel это не так, как телефон идет в глубокий спящий режим и сеть передачи данных, поэтому приложение не получает сеть передачи данных и не синхронизирует данные с сервера ». Я вижу, что проблема заключается в том, что «приложение не получает сеть передачи данных» – satur9nine