Хорошо, я боролся с этим некоторое время, и у меня есть приложения для деки, в которых я не сталкивался с этой проблемой. Я разрабатываю виджет, который позволяет воспроизводить звук при нажатии кнопки на виджете.
Я предполагаю, что я просто неправильно использую 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), но я подумал, что могу добавить это для тех, кто не знаком с некоторыми методами.