Android 2.2 отключает воспроизведение звука MediaPlayer?

После некоторого Googling это кажется распространенной проблемой, но я еще не нашел реального решения. Я не тестировал на самом устройстве, но эмулятор отключает мои звуковые клипы примерно на 80%. Я воспроизвожу файлы .wav.

Кто-нибудь знает программное решение этих проблем?

редактировать:

public void play(Context context){ if (soundPlayer != null){ soundPlayer.release(); } int rId = 0; switch(aIndex){ case 0: rId = R.raw.c0; break; case 1: rId = R.raw.c1; break; case 2: rId = R.raw.c2; break; case 3: rId = R.raw.c3; break; case 4: rId = R.raw.c4; break; case 5: rId = R.raw.c5; break; case 6: rId = R.raw.c6; break; case 7: rId = R.raw.c7; break; case 8: rId = R.raw.c8; break; case 9: rId = R.raw.c9; break; case 10: rId = R.raw.c10; break; case 11: rId = R.raw.c11; break; case 12: rId = R.raw.c12; break; case 13: rId = R.raw.c13; break; case 14: rId = R.raw.v14; break; case 15: rId = R.raw.v15; break; case 16: rId = R.raw.v16; break; case 17: rId = R.raw.v17; break; case 18: rId = R.raw.v18; break; case 19: rId = R.raw.v19; break; case 20: rId = R.raw.v20; break; case 21: rId = R.raw.v21; break; case 22: rId = R.raw.v22; break; case 23: rId = R.raw.v23; break; default: rId = R.raw.error; break; } soundPlayer = MediaPlayer.create(context, rId); if (soundPlayer != null){ soundPlayer.start(); } } 

Ну для начала я попытался бы убедиться, что функция MediaPlayer.create() вызывается до start() . Если это игра, загрузите звуки, когда они начнут новую игру (создавая новый медиаплеер для каждого звука). Причина в том, что функция create эффективно загружает звуковой файл, а затем готов к плавному воспроизведению, когда вы вызываете start . Если вы загружаете файл каждый раз перед его запуском, вы не только делаете больше работы, чем вам нужно, но могут иметь нежелательные последствия для эмулятора. Я не уверен, что вы заметили, но эмулятор не является точным самым быстрым инструментом из сарая по сравнению с фактически любым физическим устройством. В результате я думаю, что эмулятор «играет» звук и думает, что он завершен до того, как звук начнет воспроизводиться, в основном из-за медленной скорости эмулятора.

Попробуйте это на самом устройстве, и я думаю, что у вас не будет никаких проблем.

Просто открыл этот вопрос, имея ту же проблему. Простой ответ в моем случае состоял в том, чтобы сделать MediaPlayer переменной класса. Если вы сделаете это локальным для своего метода, сборщик мусора, видимо, подметает его и убивает звуковую игру.

Я думаю, вам нужно сделать релиз, прежде чем начать … пример

  if( mPlayer!= null ) mPlayer.release(); mPlayer = MediaPlayer.create(this, listaMP3[contador]); mPlayer.start(); 

Для причины soem, если я определяю mediaPlayer вне метода, который я использую для воспроизведения песни, он работает.

Хотя я только называю метод playSong () один раз;

  mediaPlayer = MediaPlayer.create(mContext, R.raw.overworld); mediaPlayer.setVolume(musicVolume, musicVolume); playSong(); 

Метод playSong:

  private void playSong() { if (!mediaPlayer.isPlaying()) mediaPlayer.start(); // no need to call prepare(); create() does that for you }