3

Can anybody tell me how to mute earpiece in android (targetSdkVersion 26). I tried this:

audioManager.setSpeakerphoneOn(false);

but it only mutes the speaker, not the earpiece.
I also tried this:

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

and this:

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);
}

with the same effect.

I work with webrtc and my goal is to mute/unmute the output audio. Thank you very much.

npkllr
  • 556
  • 1
  • 5
  • 20
Patrik
  • 51
  • 1
  • 1
  • 2
  • You mean to mute/unmute microphone or the audio of earphones? – Haider Ali Sep 19 '18 at 08:00
  • I mean mute/unmute the audio of earphones – Patrik Sep 19 '18 at 08:04
  • Your question is quite similar to this one ( https://stackoverflow.com/questions/20965530/how-to-mute-audio-in-headset-but-let-it-play-on-speaker-programmatically ), didn't you find any solution from this solution? – Haider Ali Sep 19 '18 at 08:14

1 Answers1

0

Here is how to mute/unmute:

private RTCSession currentSession;

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

And also if you want to switch between different audio sources:

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);
        }
    }
}
Rubycon
  • 18,156
  • 10
  • 49
  • 70