使用带有媒体播放器的线程

时间:2011-09-07 17:07:49

标签: android multithreading media-player

我试图按照我想要的方式让它工作,我想我不会在某些时候使用它,但我试图解决其他问题并改变了一些事情并搞砸了。基本上我就是这个按钮是一个播放按钮。它应该通过另一个线程运行媒体播放器,以便它更快地做出反应和缓冲。问题是在它播放到最后并且我点击播放它结束并继续运行onCompletion。当我希望它重新开始并从头开始玩。

public void onClick(View v) {

                if(playClick%2==0){
                    song1.setBackgroundResource(R.drawable.button_pause);

                    try{
                        if(playClick==0){
                            playThread();
                            if(lastPlayedExists){
                                lastPlayed.release();
                            }
                        }

                        mp.start();
                        mpExists = true;
                        playClick++;

                        lastPlayed = mp;
                        lastPlayedExists=true;


                        mp.setOnCompletionListener(new OnCompletionListener(){

                            @Override
                            public void onCompletion(MediaPlayer media) {
                                mp.reset();
                                song1.setBackgroundResource(R.drawable.button_play);

                            }

                        });
                    }catch (NullPointerException e){

                    }

                }
                else if (playClick%2==1){
                    song1.setBackgroundResource(R.drawable.button_play);
                    mp.pause();

                    playClick++;
                }

            }
        }
    });

这是媒体播放器的主题

private void playThread(){
    try{
        new Thread(new Runnable() {
            public void run() {

                try {
                    mp.setDataSource(song);
                } catch (IllegalArgumentException 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();
                }
                try {
                    mp.prepare();
                } catch (IllegalStateException e) {

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

            }
        }).start();
    }catch(IllegalStateException e){

    }

}

我在onCompletion中尝试了mp.reset(),mp.stop()和mp.release()以及在不同的测试中尝试lastPlayed.release()。除了它们都没有,它只是按钮更改和进度条重置。如果你知道如何解决这个并让它重播,我应该非常感激。或者,如果你知道如何让线程停止并重新启动一些如何让我回想起并再次执行该线程也会起作用(atm当它被尝试时崩溃,因为线程已经启动)。谢谢,我感谢任何意见。

1 个答案:

答案 0 :(得分:1)

mp.setOnCompletionListener(new OnCompletionListener(){

                        @Override
                        public void onCompletion(MediaPlayer media) {
                            playClick=2;
                            song1.setBackgroundResource(R.drawable.button_play);

                        }

                    });