首页 > 解决方案 > 如何强制 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());
                        }
                    }
                }
            });
        }
    };

标签: javaandroidtext-to-speech

解决方案


要将音频路由到顶部扬声器,请使用 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()


推荐阅读