java - 如何强制 Android 的文本从手机的顶部扬声器发出语音,就好像它是普通电话一样
问题描述
我正在尝试使用 Android 的TextToSpeech服务来模拟电话。我正在尝试将演讲从您耳边的顶部扬声器中发出。这是在 socket.io 监听器中完成的。
我已经确认AudioManager.STREAM_VOICE_CALL
在我的手机(基本手机)上使用呼叫输出流,但它并没有从耳机中出来。
有没有人有什么建议?我目前没有其他设备可以对其进行测试。这可能是问题吗?
private Emitter.Listener onEmergencyType = new Emitter.Listener() {
@Override
public void call(final Object... args) {
runOnUiThread(new Runnable() {
@Override
public void run() {
String emergType = args[0].toString();
HashMap<String, String> myHashCall = new HashMap<String, String>();
myHashCall.put(TextToSpeech.Engine.KEY_PARAM_STREAM, String.valueOf(AudioManager.STREAM_VOICE_CALL));
t1.speak(emergType, TextToSpeech.QUEUE_FLUSH, myHashCall);
if(!t1.isSpeaking()) {
try {
GetAudio("emergencyType", emergType);
} catch (Exception e) {
Log.e("PhoneCallActivity", "unexpected " + e.getMessage());
}
}
}
});
}
};
解决方案
要将音频路由到顶部扬声器,请使用 AudioManager 的方法setSpeakerphoneOn
。将其设置为false
将声音路由到顶部扬声器,true
-> 到底部(扬声器)
AudioManager audioManager = (AudioManager) context.getSystemService(AUDIO_SERVICE);
audioManager.setSpeakerphoneOn(false);
此外,您需要在 AndroidManifest 中获得额外权限
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
谈论听筒 - 如果它是无线(蓝牙)耳机 - 你也应该使用setBluetoothScoOn(true)/setBluetoothScoOn(false)
和startBluetoothSco()/stopBluetoothScon()
推荐阅读
- java - 使用 JAR 文件附加快照版本名称
- php - 当codeigniter的标头中缺少令牌字段时,我只想返回JSON错误响应
- php - 我在数据库中有患者信息,现在我想在 Laravel 项目中以另一种形式访问一个人的信息
- python - 姜戈;无法加载静态文件
- c++ - 限制类的实例数
- c# - 使用LINQ分页和存储过程分页的要点是什么?
- php - PHP 不会加载,因为查询不返回任何行
- php - 如何使用数据库扩展 PDO 在 PHP 中编写多查询
- jpa - 映射 JPA 实体:注释 oneToMany manyToOne
- vb.net - VB.Net ListViewItemComparer 没有 SortOrder