現在、音声認識をBTヘッドセットを用いて実装を行っていますが、SCOモードへの遷移に失敗する時と成功する時があり、logcatを見てもトレースできない状況です。

失敗する時も成功するときも接続前には、

W/AudioRecord: dead IAudioRecord, creating a new one from obtainBuffer()

が表示されます。
失敗時にはこれ以降のログが出力されません。

Bluetoothの制御にはGoogleのBluetoothControllerクラスを使用しています。
GitHub BluetoothController.java

ソースを載せられませんが、処理順としては以下になります。
1.Bluetooth初期化(SCO遷移処理を成功するまで繰り返す)
2.Google Speech to Text初期化
3.Text to Speech初期化
4.認識・読み上げ処理開始

確実にSCOモードに遷移する方法、遷移できなかった場合の処理などご教示願います。
可能であれば、遷移失敗後に再度接続し直し、SCOモードへのリトライがかけられると嬉しいです。