Хорошо, я боролся с этим какое-то время и у меня есть приложения на звуковой панели, в которых я не сталкивался с этой проблемой. Я разрабатываю виджет, который позволяет воспроизводить звук при нажатии кнопки наwidget.
Я предполагаю, что просто неправильно использую setOnPreparedListener, но в основном происходит то, что некоторые из моих звуков воспроизводятся правильно и, скорее всего, звуки обрежут последнюю часть, заметную словом или звукомЭффект отсутствует.Ниже приведен мой код, пожалуйста, дайте мне знать, если у вас есть идеи, что не так с кодом, или опубликуйте рабочую версию.
Заранее спасибо.
public int onStartCommand(Intent intent, int flags, int startId) {
/** Get our place holder for quotes & sounds. */
int s = UpdateService.getQuoteNumber();
/** Check if a sound is playing if so... stop and reset it. */
if (mp != null && mp.isPlaying()){mp.stop();mp.reset();}
/** Create a new mediaplayer and set looping. */
mp = MediaPlayer.create(this, SoundsClicked.randomSound[s]);
mp.setLooping(false);
/** Try to prepare the sound/mediaplayer, if not report error & type. */
try {mp.prepare();}
catch (IllegalStateException e) {e.printStackTrace();Log.e(Integer.toString(s), "IllegalStateException");}
catch (IOException e) {e.printStackTrace();Log.e(Integer.toString(s), "IOException");}
/** Check if the sound is prepared, if so play it. */
mp.setOnPreparedListener(new OnPreparedListener() {
public void onPrepared(MediaPlayer mp) {
mp.start();
while (mp.isPlaying()) {};
}
});
return flags;}
Это вызывается из службы (очевидно, из onStartCommand), но я решил, что я добавлю это для тех, кто не знаком с некоторыми из методов.