【问题标题】:Using a thread with media player使用带有媒体播放器的线程
【发布时间】:2011-11-12 08:38:06
【问题描述】:

我试图让它以我想要的方式工作,但我认为我在某些时候无法做到,但我试图修复其他东西并更改了一些东西并将其搞砸了。基本上我这个按钮是一个播放按钮。它应该通过另一个线程运行媒体播放器,以便它更快地做出反应和缓冲。问题是在它播放到最后并且我单击播放它结束并继续运行 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){

    }

}

我已经尝试使用具有 mp.reset()、mp.stop() 和 mp.release() 的 onCompletion 以及在不同的测试中尝试 lastPlayed.release()。以及它们都不在那里,只是按钮更改和进度条重置。如果您知道如何解决此问题并使其重播,我将不胜感激。或者,如果您知道如何使线程停止并重新启动一些方法,以便我可以让它回忆并再次执行线程,这也可以工作(atm 尝试过它会崩溃,因为线程已经启动)。谢谢,我感谢任何意见。

【问题讨论】:

  • 好吧,没有人想回答,我还不能回答我自己的问题,但如果有人想知道我确实想通了。与playClick有关。我在 onCompletion 中将其设置为 2。还取出了 mp.reset()。现在效果很好。

标签: android multithreading media-player


【解决方案1】:
mp.setOnCompletionListener(new OnCompletionListener(){

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

                        }

                    });

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-01-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多