java - 如何使用 AudioManager 使听筒静音?

标签 java android webrtc

谁能告诉我如何在 android (targetSdkVersion 26) 中使听筒静音。我试过这个:

audioManager.setSpeakerphoneOn(false);

但它只会使扬声器静音,不会使听筒静音。
我也试过这个:

audioManager.setMode(AudioManager.MODE_IN_COMMUNICATION);
audioManager.setStreamVolume(STREAM_VOICE_CALL, 0, AudioManager.FLAG_REMOVE_SOUND_AND_VIBRATE);

还有这个:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
    am.requestAudioFocus(new AudioFocusRequest.Builder(AudioManager.AUDIOFOCUS_GAIN_TRANSIENT_EXCLUSIVE)
              .setAudioAttributes(new AudioAttributes.Builder().setUsage(USAGE_VOICE_COMMUNICATION).build()).build());
    am.adjustVolume(AudioManager.ADJUST_MUTE, AudioManager.FLAG_REMOVE_SOUND_AND_VIBRATE);
}

效果相同。

我使用 webrtc,我的目标是静音/取消静音输出音频。非常感谢。

最佳答案

静音/取消静音的方法如下:

private RTCSession currentSession;

private void setAudioEnabled(boolean isAudioEnabled) {
    if (currentSession != null && currentSession.getMediaStreamManager() != null) {
        currentSession.getMediaStreamManager().getLocalAudioTrack().setEnabled(isAudioEnabled);
    }
}

如果您想在不同的音频源之间切换:

public void onSwitchAudio() {
    if (audioManager.getSelectedAudioDevice() != AppRTCAudioManager.AudioDevice.SPEAKER_PHONE) {
        audioManager.selectAudioDevice(AppRTCAudioManager.AudioDevice.SPEAKER_PHONE);
    } else {
        if (audioManager.getAudioDevices().contains(AppRTCAudioManager.AudioDevice.BLUETOOTH)) {
            audioManager.selectAudioDevice(AppRTCAudioManager.AudioDevice.BLUETOOTH);
        } else if (audioManager.getAudioDevices().contains(AppRTCAudioManager.AudioDevice.WIRED_HEADSET)) {
            audioManager.selectAudioDevice(AppRTCAudioManager.AudioDevice.WIRED_HEADSET);
        } else {
            audioManager.selectAudioDevice(AppRTCAudioManager.AudioDevice.EARPIECE);
        }
    }
}

关于java - 如何使用 AudioManager 使听筒静音?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52400720/

相关文章:

java - @inherited 也使 @Overrided 方法值继承了注释?

android - 删除 Android fragment 中回收器 View 上方不需要的空白区域

javascript - 在 Node Js 中,如何写入从视频上传的文件 block

audio - 使用 WebRTC 录制短音频文件

java - 从 Java 并排生成两个 HTML 表格

java - 在这种情况下,Jackson 在使用 ObjectMapper.readTree 反序列化 JSON 时会创建 ShortNode?

java - 用于 ssm 的 aws java sdk 给出 java.lang.NoSuchFieldError : SIGNING_REGION

java - JTable 过滤问题

php - 如何确保您的 PHP 脚本仅由您授权的应用程序调用?

webrtc - 如何在 Windows 服务器上安装并开始使用 webrtc