Переключение между наушником и громкой связью при нажатии кнопки
Я пытаюсь воспроизводить звук как с громкоговорителя, так и с наушника, используя кнопку переключения между ними. Проблема в том, что я пытаюсь по умолчанию воспроизводить звук с наушника, но ничего не выходит. Затем, когда я нажимаю кнопку для переключения на громкую связь, звук все равно не воспроизводится. Я играю из локального необработанного файла.
У меня также есть android.permission.MODIFY_AUDIO_SETTINGS в Манифесте.
Вот мой код:
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
context = getActivity().getBaseContext();
am = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE);
am.setMode(AudioManager.MODE_IN_CALL);
am.setSpeakerphoneOn(false);
am.setBluetoothScoOn(true);
speakerON = false;
}
@Override
public void onClick(View v)
{
switch (v.getId())
{
case R.id.buttonSpeaker:
if(!speakerON)//speaker off
{
speakerON = true;
am.setMode(AudioManager.MODE_NORMAL);
am.setSpeakerphoneOn(true);
am.setBluetoothScoOn(false);
speaker.setCompoundDrawablesWithIntrinsicBounds(android.R.drawable.ic_lock_silent_mode_off, 0, 0, 0);
}
else
{
speakerON = false;
am.setMode(AudioManager.MODE_IN_CALL);
am.setSpeakerphoneOn(false);
am.setBluetoothScoOn(true);
speaker.setCompoundDrawablesWithIntrinsicBounds(android.R.drawable.ic_lock_silent_mode, 0, 0, 0);
}
break;
}
}
Вот как я настраиваю MediaPlayer:
mediaPlayer = MediaPlayer.create(getActivity().getBaseContext(), R.raw.test_message);
mediaPlayer.setAudioStreamType(AudioManager.STREAM_VOICE_CALL);
mediaPlayer.start();
1 ответ
Решение
Оказывается, я неправильно установил режим.
Вот обновленный медиаплеер:
mediaPlayer = MediaPlayer.create(getActivity().getBaseContext(), R.raw.test_message);
mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
mediaPlayer.start();
И тогда я установил режим для аудио-менеджера:
context = getActivity().getBaseContext();
am = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE);
am.setMode(AudioManager.MODE_IN_CALL);
am.setSpeakerphoneOn(false);
И тогда это сработало. Поэтому убедитесь, что медиаплеер и менеджер звука находятся в одном режиме.