У меня есть приложение для Android, в котором клиент чата является одной из его функций. Клиент чата использует XMPP на основе библиотеки Smack для Android и работает Openfire как сервер XMPP в фоновом режиме. Соединение установлено с помощью BOSH. Вся обработка соединения XMPP реализована как служба для запуска и прослушивания в фоновом режиме для входящих сообщений, даже если на первом плане активность приложения отсутствует. Пока все работает отлично.Android/Smack: поддерживайте соединение XMPP в спящем режиме
Единственная проблема, похоже, в спящем режиме. В эмуляторе (когда установлено значение «Stay Awake») или с использованием телефона, соединения XMPP удерживаются, и приложение может отправлять и получать сообщения. Однако, как только телефон переходит в спящий режим, соединение XMPP ломается - я вижу его в консоли администратора сервера Openfire, что пользователь находится в автономном режиме. Интуитивно я хочу получать сообщения все время, например, WhatsApp.
Конечно, я искал в Интернете, включая Stackoverflow, но я не смог получить окончательный ответ. Часто прецедентом является то, что задача должна выполняться периодически, скажем, один раз в час. Но это не похоже на fir в случае клиента чата. Так как я предполагаю, что это общий случай использования - в конце концов, есть так много чат приложений или приложений с чатом особенности там - это мой вопрос:
Как я должен изменить/продлить приложение, которое я могу получить сообщение чата во время сна?
Я наткнулся на
WakeLock
. Это способ пойти или они не подходят для моего использования?С Lollipop существует также
JobScheduler
API, который сам используетWakeLock
. Лучше?Как, например, WhatsApp обрабатывает этот случай?
На стороне примечания: У меня проблемы с режимом ожидания, используя эмулятор для отладки. Когда я выключаю «Stay Awake» в эмуляторе, экран становится черным через 1+ мин, а соединение XMPP прерывается. Но я как-то понятия не имею, как проснуться/переключить эмулятор обратно, как только он потемнеет. Android Studio на самом деле говорит мне в какой-то момент, что устройство или что-то ушло, и я снова должен перезапустить эмулятор.
Вам не нужны push-уведомления, и «естественное поведение соединения XMPP не отключается после указанного промежутка времени ожидания». – Flow