Paho Клиент Android MQTT не отправляет PINGREQ брокеру, когда экран телефона выключенJAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Paho Клиент Android MQTT не отправляет PINGREQ брокеру, когда экран телефона выключен

Сообщение Anonymous »

У меня есть небольшое приложение для Android, реализующее службу переднего плана, которая взаимодействует с брокером Mostic mqtt, используя paho MQTTClient: org.eclipse.paho:org.eclipse.paho.client.mqttv3:1.2.5

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

В этом случае он отключается от брокера, потому что «имеет превышено время ожидания», что вызвано тем, что клиент не отправляет никаких pingreq.

Если экран включен (заблокирован или нет) и кабель для зарядки не подключен, я вижу pingreq каждый интервал проверки активности.
То же самое, когда экран выключен с подключенным кабелем для зарядки.
Это одинаковое поведение на Android 9 и 14
Что касается настроек Android
  • on A14 Я разрешил приложению «использовать батарею в фоновом режиме без каких-либо ограничений» (неограниченный режим) в настройках приложения.
  • на A9 разрешена фоновая активность и нет оптимизации батареи
Сервис запускается в MainActivity стандартным способом с помощью

Код: Выделить всё

onCreate (Bundle savedInstanceState)
{
...
startService(new Intent(this, MQTTService.class));
...
}

И в классе MQTTService

Код: Выделить всё

public int onStartCommand(Intent intent, int flags, int startId)
{
Intent notIntent = new Intent(this, MainActivity.class);
PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, notIntent, PendingIntent.FLAG_IMMUTABLE);
Notification not = new NotificationCompat.Builder(this, CHANNEL_ID)
.setContentTitle("MQTT listener")
.setContentText("connecting to broker...")
.setSmallIcon(R.drawable.ic_mqtt)
.setContentIntent(pendingIntent)
.setColor(getColor(R.color.white))
.setOngoing(true)
.setPriority(PRIORITY_MAX)
.build();
not.flags = Notification.FLAG_ONGOING_EVENT;
startForeground(NOT_STATE_ID, not);
connect2Server();
Log.d(TAG, "onStartCommand()");
isRunning = true;
return START_STICKY;
}
Что мне здесь не хватает?

Подробнее здесь: https://stackoverflow.com/questions/798 ... reen-is-of
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»