Я работаю над своим приложением, которое воспроизводит звуковой файл через передний или задний динамик, и это можно изменить «на лету». Вот код:
// mediaPlayer was created previously and then started to play ok
private void switchTarget() {
int pos = 0;
try {
if (mediaPlayer.isPlaying()) {
pos = mediaPlayer.getCurrentPosition();
mediaPlayer.stop();
}
mediaPlayer.reset();
FRONT = !FRONT;
mediaPlayer.setAudioStreamType(FRONT ? AudioManager.STREAM_VOICE_CALL : AudioManager.STREAM_RING);
mediaPlayer.setDataSource(WakeUp.this, mediaPath);
mediaPlayer.prepare();
mediaPlayer.seekTo(pos);
mediaPlayer.start();
} catch (Exception e) {Toast.makeText(context, e.toString(),Toast.LENGTH_LONG).show();}
}
Дело в том, что:
- если я начинаю с FRONT = false, то есть звук начинает играть через задний динамик, я могу переключиться и звук продолжает играть через фронтальный, как и положено.
- когда FRONT изначально установлено в true, переключение на тыловые динамики приводит к полному отсутствию звука, но при повторном включении звук восстанавливается через передний динамик.
Подводя итог, после воспроизведения аудиофайла в переднем динамике переключение на задний не дает никакого эффекта. Кроме того, поскольку временная позиция в аудиофайле сохраняется с помощью переключателей, кажется, что прошло время, пока работал задний динамик, хотя звука не слышно.
Например, я начинаю с переднего динамик на 10 секунд (звучит нормально), переключиться на задний динамик на 5 секунд (нет звука), переключиться обратно на передний динамик (хорошо, и файл возобновится на 15-й секунде). Я меняю переменную FRONT и снова запускаю приложение, 10 секунд на заднем динамике (работает), переключаюсь на передний динамик (тоже работает) и обратно на задний динамик (нет звука).
Может быть, как-то, когда передний динамик отработал и остановился, блокирует задний.
Я даже пытался сохранить две переменные mediaPlayer, по одной для каждого динамика, и попеременно воспроизводить и останавливать, с теми же плохими результатами.
Заранее спасибо!