我的Android教程声明我可以明确告诉TTS引擎使用哪个流:
对于音乐播放:
params.put(TextToSpeech.Engine.KEY_ParaM_STREAM,String.valueOf(AudioManager.STREAM_MUSIC));
并拨打电话:
params.put(TextToSpeech.Engine.KEY_ParaM_STREAM,String.valueOf(AudioManager.STREAM_VOICE_CALL));
我的理解是,到蓝牙耳机的音频路由工作使得STREAM_MUSIC转到A2DP(在Android蓝牙设置中称为“媒体音频”)并且STREAM_VOICE_CALL转到HSP(在Android蓝牙设置中也称为“电话音频”).
但无论我在我的小应用程序中使用STREAM_MUSIC还是STREAM_VOICE_CALL,音频总是由于某种原因而变为A2DP.
最佳答案
在大多数设备上,我大部分时间都在使用它.以下是使用蓝牙SCO而不是A2DP在语音呼叫流上启动TTS的部分.
if (mTtsReady) {
myHash = new HashMaparaM_UTteraNCE_ID,"A2DP_Vol");
OLD_AUdio_MODE = am2.getMode();
if(SMsstream == 1){
if (am2.isBluetoothScoAvailableOffCall()) {
am2.startBluetoothSco();
}
if(!am2.isspeakerphoneOn()){
speakerPhoneWasOn = false;
am2.setSpeakerphoneOn(true);
}
myHash.put(TextToSpeech.Engine.KEY_ParaM_STREAM,String.valueOf(AudioManager.STREAM_VOICE_CALL));
am2.requestAudioFocus(null,AudioManager.STREAM_VOICE_CALL,AudioManager.AUdioFOCUS_GAIN_TRANSIENT);
}
else{
am2.requestAudioFocus(null,AudioManager.STREAM_MUSIC,AudioManager.AUdioFOCUS_GAIN_TRANSIENT);
myHash.put(TextToSpeech.Engine.KEY_ParaM_STREAM,String.valueOf(AudioManager.STREAM_MUSIC));
}
new CountDownTimer(SMS_DELAY,SMS_DELAY/2) {
@Override
public void onFinish() {
try {
mTts.speak(str,TextToSpeech.QUEUE_ADD,myHash);
} catch (Exception e) {
Toast.makeText(application,R.string.TTSNotReady,Toast.LENGTH_LONG).show();
e.printstacktrace();
}
}
@Override
public void onTick(long arg0) {
}
}.start();
}
现在我只是在完成后让流恢复原来的问题.阅读TTS一切正常.它会暂停任何音乐,播放TTS,然后恢复音乐.但是,当我稍后退出应用程序时,媒体流现在通过手机耳机播放,直到我重新启动.我在这里发布了这个问题:Audio stream stays on earpiece after using AudioManager
你可以在这里看到我的整个项目:http://code.google.com/p/a2dpvolume/
原文地址:https://www.jb51.cc/android/430462.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。