Аудио seekBar Тема Проблема? - PullRequest
1 голос
/ 24 июля 2011

Изначально у меня был MediaPlayer mPlayers для воспроизведения / паузы / остановки моего аудиофайла.Теперь я пытаюсь добавить панель поиска для моих медиа.Я попытался использовать Threads, и вот что я придумал:

В onCreate ():

seekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
        @Override
        public void onProgressChanged(SeekBar seekBar, int progress,
                boolean fromUser) {
            // TODO Auto-generated method stub
            mPlayer.seekTo(progress);
        }

////........Omitted Code..........\\\\

//At the very end of the method:
seekThread  = new Thread(this); //My Activity implements:Runnable
seekThread.start();

Затем я реализовал метод run() для обновления панели поиска каждые 1 сек.:

public void run() {
    try {
        while(mPlayer != null){
            int currentPosition = mPlayer.getCurrentPosition();
            Message msg = new Message();
            msg.what = currentPosition;
            threadHandler.sendMessage(msg);
            Thread.sleep(1000);
        }

    } catch (InterruptedException e) {
        e.printStackTrace();
    }
}
private Handler threadHandler = new Handler(){
    public void handleMessage(Message msg){
        seekBar.setProgress(msg.what);
    }
};

Однако в моем HTC Magic звук работает неэффективно.Некоторые слова повторяются.Кажется, что строка поиска постепенно возвращается назад.

Чтобы вы хорошо поняли проблему, скажем так: если в аудио сказано, что: abcdefghijklmn, то это будет так: abccdeffghijjklmnn.

Какие улучшения вы предлагаете моей теме?Я правильно делаю?

1 Ответ

3 голосов
/ 24 июля 2011

Не уверен, что это поможет, но попробуйте:

seekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
    @Override
    public void onProgressChanged(SeekBar seekBar, int progress,
            boolean fromUser) {
        if (fromUser) {
            mPlayer.seekTo(progress);
        }
    }

Без этого условия mPlayer.seekTo (progress);вызывается каждый раз, когда вы вызываете seekBar.setProgress (msg.what);

...