Fix IllegalStateException when A2DP connects before boot completes.
Under some circumstances, the broadcast intent BluetoothA2dp.ACTION_CONNECTION_STATE_CHANGED can be sent before the system is ready, triggering an IllegalStateException, "Cannot broadcast before boot completed" and runtime crash. Fixed the race condition by adding the Intent.FLAG_RECEIVER_REGISTERED_ONLY_BEFORE_BOOT flag to the broadcast intent. All system receivers of this intent are registered with registerReceiver() rather than as components in the manifest, so nothing should change in the event that the A2DP connection state change is broadcast before boot completion. Any apps that define a receiver for either BluetoothA2dp.ACTION_CONNECTION_STATE_CHANGED or BluetoothA2dp.ACTION_PLAYING_STATE_CHANGED in their manifest will not receive these broadcasts in the case where they are sent before the system has finished booting. Normally, user applications should not care about these events anyway and should let the audio manager take care of audio routing on their behalf. In the event that an app does care about A2DP state changes, it should either register for these intents with registerReceiver(), or it can add an intent filter for ACTION_BOOT_COMPLETED and test the state of Bluetooth and A2DP at that time. Apps which care about the state of the Bluetooth adapter should do this also, because BluetoothAdapter.ACTION_STATE_CHANGED is already being sent with FLAG_RECEIVER_REGISTERED_ONLY_BEFORE_BOOT. Bug: 4982088 Change-Id: I10e55713f9d07d6dc88b4480b45b1aeb3aaf170b
Loading
Please register or sign in to comment