Android SeekBar не работает при воспроизведении аудио

У меня проблема с панелью поиска, когда я воспроизвожу аудио с помощью медиаплеера, панель поиска не запускается с ней. я не понимаю, почему панель поиска не «обновляет» прогресс.

Спасибо за помощь.

ниже я размещаю код, я не понимаю, когда я ошибаюсь.

MediaPlayer  player=new MediaPlayer();
SeekBar seekBar;


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    try {
        AssetFileDescriptor afd = this.getResources().openRawResourceFd(R.raw.mymp3);
        player.setDataSource(afd.getFileDescriptor(), afd.getStartOffset(), afd.getLength());
        afd.close();
        player.prepare();

    } catch (IllegalArgumentException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (SecurityException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (IllegalStateException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

    Button pausa=(Button)findViewById(R.id.button2);  
    pausa.setOnClickListener(new OnClickListener(){  
                @Override  
                public void onClick(View arg0) { 
                    player.pause();
                }  
            }); 
   Button vai=(Button)findViewById(R.id.button3);  
    vai.setOnClickListener(new OnClickListener(){  
                @Override  
                public void onClick(View arg0) {
                    player.start();
                }  
            });

    int tutto=player.getDuration();

    seekBar = (SeekBar)findViewById(R.id.seekBar1);

    seekBar.setMax(tutto);
    seekBar.setProgress(player.getCurrentPosition() / 1000);
}

person Mr.Sem    schedule 05.03.2014    source источник


Ответы (2)


Самый простой способ сделать это — создать объект Timer, который срабатывает каждую секунду.

Внутри кода таймера, который вы вызываете

seekBar.setProgress(player.getCurrentPosition() / 1000);

Кроме того, вы можете реализовать setOnCompletionListener, чтобы получать уведомления об окончании воспроизведения, чтобы вы могли остановить таймер. Таймер должен быть остановлен либо в том случае, если воспроизведение достигло конца, приложения завершились, либо вы остановили музыку вручную (например, в ответ на кнопку остановки).

person Merlevede    schedule 05.03.2014

Потому что вы устанавливаете прогресс в onCreate(), и он вызывается только один раз — как вы уже догадались, когда создается Activity. Я не очень хорошо знаком с MediaPlayer, поэтому я не знаю, есть ли какой-то прослушиватель обновлений, но вам нужен какой-то таймер, который обновляет прогресс каждую секунду или около того.

person SimonSays    schedule 05.03.2014