diff --git a/record_android/CHANGELOG.md b/record_android/CHANGELOG.md index 756e5a0..4360920 100644 --- a/record_android/CHANGELOG.md +++ b/record_android/CHANGELOG.md @@ -1,6 +1,8 @@ ## 1.2.6 * fix: Improve amplitude computation. -* fix: java.lang.IllegalStateException: Failed to stop the muxer +* fix: java.lang.IllegalStateException: Failed to stop the muxer. +* fix: Exception raised on bluetooth receiver unregistration. +* chore: Upgrade to latest AGP. ## 1.2.5 * fix: Applying effects. diff --git a/record_android/android/src/main/kotlin/com/llfbandit/record/methodcall/RecorderWrapper.kt b/record_android/android/src/main/kotlin/com/llfbandit/record/methodcall/RecorderWrapper.kt index 4c1e7f5..7770cac 100644 --- a/record_android/android/src/main/kotlin/com/llfbandit/record/methodcall/RecorderWrapper.kt +++ b/record_android/android/src/main/kotlin/com/llfbandit/record/methodcall/RecorderWrapper.kt @@ -187,7 +187,10 @@ internal class RecorderWrapper( private fun maybeStopBluetooth() { bluetoothReceiver?.removeListener(this) - bluetoothReceiver?.unregister() + + if (bluetoothReceiver?.hasListeners() != true) { + bluetoothReceiver?.unregister() + } } override fun onBlScoConnected() { diff --git a/record_android/android/src/main/kotlin/com/llfbandit/record/record/bluetooth/BluetoothReceiver.kt b/record_android/android/src/main/kotlin/com/llfbandit/record/record/bluetooth/BluetoothReceiver.kt index 865bf60..d396a03 100644 --- a/record_android/android/src/main/kotlin/com/llfbandit/record/record/bluetooth/BluetoothReceiver.kt +++ b/record_android/android/src/main/kotlin/com/llfbandit/record/record/bluetooth/BluetoothReceiver.kt @@ -23,6 +23,7 @@ class BluetoothReceiver( private val listeners = HashSet() private val devices = HashSet() private var audioDeviceCallback: AudioDeviceCallback? = null + private var mRegistered: Boolean = false init { filter.addAction(AudioManager.ACTION_SCO_AUDIO_STATE_UPDATED) @@ -34,6 +35,7 @@ class BluetoothReceiver( fun register() { context.registerReceiver(this, filter) + mRegistered = true audioDeviceCallback = object : AudioDeviceCallback() { override fun onAudioDevicesAdded(addedDevices: Array) { @@ -71,7 +73,11 @@ class BluetoothReceiver( } listeners.clear() - context.unregisterReceiver(this) + + if (mRegistered) { + context.unregisterReceiver(this) + mRegistered = false + } } fun addListener(listener: BluetoothScoListener) { @@ -90,6 +96,7 @@ class BluetoothReceiver( } } + @Suppress("DEPRECATION") fun startBluetooth(): Boolean { if (!audioManager.isBluetoothScoAvailableOffCall) { return false @@ -102,6 +109,7 @@ class BluetoothReceiver( return true } + @Suppress("DEPRECATION") fun stopBluetooth() { if (audioManager.isBluetoothScoOn()) { audioManager.stopBluetoothSco()