Мы только начали создавать свою собственную систему уведомлений (из-за требований клиента) для Android и нашли Eclipse Paho (http://www.eclipse.org/paho/), Излишне говорить, что этот проект действительно захватывающий.
Проблема с Android заключается в том, что если процессор находится в состоянии ожидания, клиент MQTT может не получить возможность отправить ping с заданным интервалом. Обходной путь использует AlarmManager, чтобы разбудить его и выполнить задание. В документации на Android говорится:
Диспетчер аварийных сигналов удерживает блокировку слежения за процессором, пока сигнал тревоги приемник onReceive(). Это гарантирует, что телефон не будет спать, пока вы не закончите работу с трансляцией. Когда функция onReceive() возвращается, диспетчер аварийных сигналов отпускает эту блокировку. Это означает, что в некоторых случаях телефон будет спать, как только ваш onReceive() завершает.
http://developer.android.com/reference/android/app/AlarmManager.html
Мне нужно быть уверенным, что я могу отправить команду ping внутри этого метода onReceive(), в то время как у CPU есть PARTIAL_WAKE_LOCK, поэтому я искал способ отправки по электронной почте ping на сервер, но, похоже, клиент не обнаруживает таких метод. Я что-то упускаю? Или, каков обходной путь здесь, кроме публикации моего собственного "пингового сообщения"? Я хочу избежать этого из-за:
- Большие накладные расходы
- Мы гарантируем, что клиенты Android будут только подписчиками, может быть с ACK Mosquitto. Им не разрешат публиковать сообщения.