Наилучшим подходом является использование обработчика для определения времени остановки воспроизведения.Запустите плеер, а затем используйте postDelayed
Обработчика, чтобы запланировать выполнение Runnable
, которое остановит игрока.Вы также должны запустить игрока только после завершения начального поиска.Примерно так:
public class PlayWord extends Activity implements MediaPlayer.OnSeekCompleteListener {
Handler mHandler;
MediaPlayer mPlayer;
int mStartTime = 6889;
int mEndTime = 7254;
final Runnable mStopAction = new Runnable() {
@Override
public void run() {
mPlayer.stop();
}
};
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
final TextView tv = new TextView(this);
tv.setText("Playing...");
setContentView(tv);
mHandler = new Handler();
mPlayer = MediaPlayer.create(this, R.raw.nicholas);
mPlayer.setOnSeekCompleteListener(this);
mPlayer.seekTo(mStartTime);
}
@Override
public void onDestroy() {
mPlayer.release();
}
@Override
public void onSeekComplete (MediaPlayer mp) {
mPlayer.start();
mHandler.postDelayed(mStopAction, mEndTime - mStartTime);
}
}
Обратите также внимание, что используемый вами метод MediaPlayer.create
возвращает MediaPlayer, который уже был подготовлен, и prepare
должен не вызываться снова, как вы.делать в вашем коде. на экране.Я также добавил вызов к release()
при завершении действия.
Кроме того, если вы хотите обновить пользовательский интерфейс после завершения поиска, имейте в виду, что этот метод обычно вызывается из потока, не являющегося пользовательским интерфейсом.Вам придется использовать обработчик для публикации любых действий, связанных с интерфейсом пользователя.