catch rare instances of foreground service not allowed to start

This commit is contained in:
Daniel Gultsch 2023-09-25 09:22:29 +02:00
parent 205472bcc7
commit 2adff4a92c
No known key found for this signature in database
GPG key ID: F43D18AD2A0982C2

View file

@ -1367,12 +1367,12 @@ public class XmppConnectionService extends Service {
if (ongoing != null) { if (ongoing != null) {
notification = this.mNotificationService.getOngoingCallNotification(ongoing); notification = this.mNotificationService.getOngoingCallNotification(ongoing);
id = NotificationService.ONGOING_CALL_NOTIFICATION_ID; id = NotificationService.ONGOING_CALL_NOTIFICATION_ID;
startForeground(id, notification); startForegroundOrCatch(id, notification);
mNotificationService.cancel(NotificationService.FOREGROUND_NOTIFICATION_ID); mNotificationService.cancel(NotificationService.FOREGROUND_NOTIFICATION_ID);
} else { } else {
notification = this.mNotificationService.createForegroundNotification(); notification = this.mNotificationService.createForegroundNotification();
id = NotificationService.FOREGROUND_NOTIFICATION_ID; id = NotificationService.FOREGROUND_NOTIFICATION_ID;
startForeground(id, notification); startForegroundOrCatch(id, notification);
} }
if (!mForceForegroundService.get()) { if (!mForceForegroundService.get()) {
@ -1392,6 +1392,14 @@ public class XmppConnectionService extends Service {
Log.d(Config.LOGTAG, "ForegroundService: " + (status ? "on" : "off")); Log.d(Config.LOGTAG, "ForegroundService: " + (status ? "on" : "off"));
} }
private void startForegroundOrCatch(final int id, final Notification notification) {
try {
startForeground(id, notification);
} catch (final IllegalStateException e) {
Log.e(Config.LOGTAG,"Could not start foreground service", e);
}
}
public boolean foregroundNotificationNeedsUpdatingWhenErrorStateChanges() { public boolean foregroundNotificationNeedsUpdatingWhenErrorStateChanges() {
return !mForceForegroundService.get() && ongoingCall.get() == null && Compatibility.keepForegroundService(this) && hasEnabledAccounts(); return !mForceForegroundService.get() && ongoingCall.get() == null && Compatibility.keepForegroundService(this) && hasEnabledAccounts();
} }