2010-11-09 3 views
7

У меня есть приложение, которое запускает сервис. У службы есть таймер и появляется уведомление каждые 30 секунд. Я заметил следующее поведение:Служба Android перестает работать, когда телефон заблокирован

  • если экран на уведомления отображаются в порядке (даже если приложение в фоновом режиме)
  • если экран выключен (с помощью кнопки питания или самостоятельно) выиграло уведомление «т показать
  • если экран выключен, но у меня есть отладки работают уведомления появляются

Как я могу сделать, запущенное с выключенным экраном.

(Действительное приложение проверяет, только если уведомление должно проверяться через каждые 30 секунд, но для целей тестирования, выше сценарий нормально)

Спасибо!

ответ

2

У вас нет. Это был бы идеальный способ быстро разрядить аккумулятор телефона. Если телефон спит, позвольте ему спать, если у вас нет ХОРОШЕЙ причины не в этом случае (в этом случае вы будете использовать AlarmManager для одноразового пробуждения в будущем).

Я не знаю, чего вы пытаетесь достичь, но вам нужно использовать совершенно другой подход. Сетевая щекотка была бы хорошей идеей, например, предполагая, что вы можете жить с вашим приложением только с 2.2+.

+0

@EdoMike Я использую код, подобный этому Контекст c = getApplicationContext(); AlarmManager alarm = (AlarmManager) c.getSystemService (Context.ALARM_SERVICE); Intent i = новый Intent (c, AlarmProxy.class); PendingIntent sender = PendingIntent.getBroadcast (c, 0, i, PendingIntent.FLAG_CANCEL_CURRENT); setRepeating (AlarmManager.ELAPSED_REALTIME_WAKEUP, 0, 10000, отправитель); registerReceiver (alarmBroadcast, новый IntentFilter (Intent.ACTION_TIME_TICK)); , но таймер не вызывается каждые 10 секунд, как я могу это сделать? –

1

Если вы действительно хотите, чтобы ваш сервис запускался каждые 30 секунд, когда устройство заблокировано, вам необходимо запланировать будильник с помощью типа ELAPSED_REALTIME_WAKEUP. Но будьте осторожны, это, безусловно, быстро разрядит батареи батарей!

4

У меня была проблема.

Вы можете использовать WakeLock для выполнения работы! Что-то вроде этого:

PowerManager pm = (PowerManager)getApplicationContext().getSystemService(
      getApplicationContext().POWER_SERVICE); 
WakeLock wl = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, TAG); 
wl.acquire(); 

Затем используйте:

wl.release(); 

выпустить wakelock.

Не фальсификатор добавить:

<uses-permission android:name="android.permission.WAKE_LOCK" />

в манифесте!

+2

не используйте это, так как он бесполезно разряжает батарею. Вместо этого используйте AlarmManager, как указано в другом ответе – Marius

+0

@Marius мы можем использовать AlarmManager для пробуждения каждые 30 секунд? –

+1

Да, просто установите для PendingIntent (например) запуск службы, а затем повторите команду AlarmManager каждые 30 секунд. – Marius

Смежные вопросы