Android 12 Catch ForegroundServiceStartNotAllowedException #1823
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Fixes #1815
This PR is [ready] for review.
Risk
This PR makes [minor] API changes.
Testing Plan
Core Tests
Tested against Sync 3.0 with Android 12 device and Android 9 device.
Android 12 device:
I was able to replicate the issue by using a delayed handler. I had to put the try-catch inside of the handler to catch it.
To catch it where it is now we can do that by throwing the exception where we call
context.startForegroundService(serviceIntent);You will also need to add@RequiresApi(api = Build.VERSION_CODES.S)when testing it this way.Android 9 device:
Connected Hello sdl without the modifications above to ensure that the code ran as intended.
Summary
Android 12 may throw a
ForegroundServiceStartNotAllowedExceptionif we try to start the router service after a certain amount of time from receiving a broadcast that requires theBLUETOOTH_CONNECTorBLUETOOTH_SCANpermission. In testing, I saw it happen between 20 to 25 seconds.Changelog
Bug Fixes
ForegroundServiceStartNotAllowedExceptionin two places inSdlBroadcastReceiver.CLA