TextToSpeech音频路由到手机扬声器而不是蓝牙耳机

noe*_*oev 8 android text-to-speech android-audiomanager audio-route android-bluetooth

我有一个android.speech.tts.TextToSpeech.speak()用于读取消息的应用程序.

这些消息只能读出连接的蓝牙耳机.所以在我调用说话方法之前,我会检查AudioManager.isBluetoothA2dpOn();

说话方法实施:

ttsOptions.putInt(TextToSpeech.Engine.KEY_PARAM_STREAM, AudioManager.STREAM_VOICE_CALL);
ttsOptions.putFloat(TextToSpeech.Engine.KEY_PARAM_VOLUME, 1.0f);//MAX
tts.speak(text, TextToSpeech.QUEUE_ADD, ttsOptions, utteranceID);
Run Code Online (Sandbox Code Playgroud)

这种行为按预期工作了大约一年,但最近它在三星设备上失败的方式只是它将音频路由到手机的扬声器并且消息被大声读出.

我设法通过以下方式解决了路由问题:

1.AudioManager.setMode(AudioManager.MODE_IN_COMMUNICATION);

2.mAudioManager.requestAudioFocus(null, AudioManager.STREAM_VOICE_CALL, AudioManager.AUDIOFOCUS_GAIN);

3.mAudioManager.startBluetoothSco();

4.播放简短的音频文件

如果我执行这4个步骤,音频路由将被修复并路由到蓝牙耳机.

问题:

为什么三星设备将音频路由到手机扬声器而不是蓝牙设备?

任何可靠的方法来检查音频是否将被路由到耳机而不是AudioManager.isBluetoothA2dpOn();?