Панель поиска не перемещается во время воспроизведения

#android

#Android

Вопрос:

Я записал аудио и воспроизвожу его через медиаплеер. Запись, воспроизведение работает нормально. Я использовал панель поиска при воспроизведении записанного голоса. Я использовал следующую кодировку для воспроизведения содержимого, хранящегося на sdcard. Все работает нормально.. mFileName — это аудиофайл на sdcard. Панель поиска не перемещается во время воспроизведения. Есть предложения…

       private void startPlaying()
{

 MediaPlayer mPlayer = new MediaPlayer();

    try {
        mPlayer.setDataSource(mFileName);
        mPlayer.prepare();
         mPlayer.start();
        mSeekBar.setMax(mPlayer.getDuration());
    } catch (IOException e) {
        Log.e(LOG_TAG, "prepare() failed");
    }
}
  

И я использовал

     mSeekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {

        @Override
        public void onStopTrackingTouch(SeekBar seekBar) {
            // TODO Auto-generated method stub

        }

        @Override
        public void onStartTrackingTouch(SeekBar seekBar) {
            // TODO Auto-generated method stub

        }

        @Override
        public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
            // TODO Auto-generated method stub
            if(fromUser){
                mPlayer.seekTo(progress);
                mSeekBar.setProgress(progress);
            }
        }
    });
    Thread currentThread  = new Thread((Runnable) this);
    currentThread.start();

 public void run() {
    // TODO Auto-generated method stub
    try {
        while(mPlayer != null){
            int currentPosition = mPlayer.getCurrentPosition();
            Message msg = new Message();
            msg.what = currentPosition;
            threadHandler.sendMessage(msg);
        }
        Thread.sleep(100);
    } catch (InterruptedException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}
private Handler threadHandler = new Handler(){
    public void handleMessage(Message msg){

        mSeekBar.setProgress(msg.what);
    }
};
  

Панель прогресса перемещается только при перемещении пользователя. Она не перемещается атомарно.

Ответ №1:

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

http://united-coders.com/nico-heid/an-android-seekbar-for-your-mediaplayer

Комментарии:

1. Я тоже это реализую. Но это не работает. Смотрите, как редактируется код.

2. Ваш run() метод реализован не так, как в примере. Thread.sleep должно быть внутри while цикла, а не после него. Сначала попробуйте заставить связанный образец работать правильно, а затем начните изменять пример кода в нужном вам направлении.