catch rare instances of foreground service not allowed to start

Daniel Gultsch created

Change summary

src/main/java/eu/siacs/conversations/services/XmppConnectionService.java | 12 
1 file changed, 10 insertions(+), 2 deletions(-)

Detailed changes

src/main/java/eu/siacs/conversations/services/XmppConnectionService.java 🔗

@@ -1580,12 +1580,12 @@ public class XmppConnectionService extends Service {
             if (showOngoing) {
                 notification = this.mNotificationService.getOngoingCallNotification(ongoing);
                 id = NotificationService.ONGOING_CALL_NOTIFICATION_ID;
-                startForeground(id, notification);
+                startForegroundOrCatch(id, notification);
                 mNotificationService.cancel(NotificationService.FOREGROUND_NOTIFICATION_ID);
             } else {
                 notification = this.mNotificationService.createForegroundNotification();
                 id = NotificationService.FOREGROUND_NOTIFICATION_ID;
-                startForeground(id, notification);
+                startForegroundOrCatch(id, notification);
             }
 
             if (!mForceForegroundService.get()) {
@@ -1605,6 +1605,14 @@ public class XmppConnectionService extends Service {
         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() {
         return !mForceForegroundService.get() && ongoingCall.get() == null && Compatibility.keepForegroundService(this) && hasEnabledAccounts();
     }