java - 如何强制 Android 的文本转语音从手机的顶部扬声器中发出,就像普通电话一样

标签 java android text-to-speech

我正在尝试使用 Android 的 TextToSpeech 模拟电话调用服务。我正在尝试将讲话从您耳边的顶部扬声器中传出。这是在 socket.io 监听器内完成的。

我已确认 AudioManager.STREAM_VOICE_CALL 正在使用我的手机(Essential Phone)上的调用输出流,但它不会从耳机中出来。

有人有什么建议吗?我目前没有其他设备可以测试它。这可能是问题所在吗?

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 - 如何强制 Android 的文本转语音从手机的顶部扬声器中发出,就像普通电话一样,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57999153/

相关文章:

java - 基于 Java/Groovy 时区的日期时间转换

java - 致命异常 : main [Android developing]

android - 在所有 Activity 中重用标题 UI 设计和功能

android - 显示名称未更新 Email.Content_URI

java - 如何通过多个可能值找到实体列表(使用或在 Spring Data 中)

Java 3D 游戏开发

java - 共享偏好编辑器混合值

android - 等到 Text to Speech 开始说话

android - 应用程序关闭时服务停止工作

java - 实例化类型 <?> 的泛型类