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
gestartet
Code: Select all
onCreate (Bundle savedInstanceState)
{
...
startService(new Intent(this, MQTTService.class));
...
}
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;
}
Mobile version