After connecting a Bluetooth device to an iOS or Android device, you may encounter the following issues:
The possible reasons include:
The iOS system selects audio routes for phone and VoIP calls, and the default audio routes are different from what you expect. Phone calls also include FaceTime calls and other calls implemented with CallKit.
The default audio route for a phone call after connecting an iOS device to a Bluetooth device:
The default audio route for a VoIP call after connecting an iOS device to a Bluetooth device:
If the default settings mentioned above conflict with the audio routes you want, you need to change them when connecting your iOS device to a Bluetooth device. For details, see Solutions.
On an iOS device, the audio route for audio inputs and outputs must be the same. If you set the Bluetooth device as the audio route for recording, the system switches the audio route for playback to the Bluetooth device accordingly.
A Bluetooth speaker can only record audio during a system phone call. If the app does not use the CallKit, the following happens:
Depending on which type of call you have an issue with, choose one of the following solutions to set the audio routes:
Before answering a phone call, change the audio route setting in Settings: swipe down to reveal the search field, search Call Audio Routing, and change the audio route to Bluetooth Headset. All incoming calls will be answered through the Bluetooth device even if you press the answer button on the iPhone.
During a phone call, you can switch between the Bluetooth Headset, Handset, or Speaker options in the call interface.
If you connect an iOS device to a Bluetooth speaker and answer calls in an app, ensure that the app uses the CallKit, otherwise, the above settings do not work.
setPreferredInputmethod to change the audio route.
Permissions to access the Bluetooth device are not added in the
Only the Bluetooth device that supports SCO can record and play audio. If the Bluetooth device supports only A2DP, then it cannot record audio, which means it cannot be used to answer a phone call.
You can route audio to a Bluetooth device only if the Android device supports the use of SCO for off-call use cases.
Add the following lines in the
AndroidManifest.xml file to request permissions to access the Bluetooth device:
<uses-permission android:name="android.permission.BLUETOOTH" /> <uses-permission android:name="android.permission.BLUETOOTH_ADMIN" /> <uses-permission android:name="android.permission.READ_PHONE_STATE" /> <!-- Add the following permission on devices running Android 12.0 or later --> <uses-permission android:name="android.permission.BLUETOOTH_CONNECT" />
Check if the Bluetooth device supports SCO. If not, switch to a SCO-capable Bluetooth device.
Call the Android native API
AudioManmager.isBluetoothScoAvailableOffCall method to check if the device supports the use of SCO for off-call use cases. If the device does not support the feature, the user can only answer the call using the system default audio route.