Der paho Android MQTT-Client sendet PINGREQ nicht an den Broker, wenn der Telefonbildschirm ausgeschaltet istAndroid

Forum für diejenigen, die für Android programmieren
Anonymous
 Der paho Android MQTT-Client sendet PINGREQ nicht an den Broker, wenn der Telefonbildschirm ausgeschaltet ist

Post by Anonymous »

Ich habe eine kleine Android-App, die einen Vordergrunddienst implementiert, der mit dem Mosquito-MQTT-Broker über paho MQTTClient kommuniziert: org.eclipse.paho:org.eclipse.paho.client.mqttv3:1.2.5

Alles ist in Ordnung, außer wenn der Bildschirm ausgeschaltet und das Ladekabel nicht angeschlossen ist.

In diesem Fall wird die Verbindung zum Broker getrennt, weil „Zeitüberschreitung wurde überschritten“, was dadurch verursacht wird, dass der Client keinen Pingreq sendet.

Wenn der Bildschirm eingeschaltet ist (gesperrt oder nicht) und kein Ladekabel angeschlossen ist, kann ich den Pingreq in jedem Keepalive-Intervall sehen.
Das Gleiche gilt, wenn der Bildschirm ausgeschaltet ist und das Ladekabel angeschlossen ist.
Das gleiche Verhalten tritt auf Android 9 und 14 auf.
Bezüglich der Android-Einstellungen
  • an A14 Ich habe der App in den App-Einstellungen erlaubt, „den Akku ohne Einschränkungen im Hintergrund zu nutzen“ (uneingeschränkter Modus).
  • Auf A9 sind Hintergrundaktivitäten und keine Akkuoptimierung zulässig
Der Dienst wird in MainActivity standardmäßig mit
gestartet

Code: Select all

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

Und in der MQTTService-Klasse

Code: Select all

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;
}
Was fehlt mir hier? Es scheint kein MQTT-Clinet-Problem zu sein, sondern eher ein Android-Energiemanagement.

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post