2013-02-23 33 views
0

我的代码x次一perticular首歌是这样如何重复使用的MediaPlayer类

 bv.setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      // TODO Auto-generated method stub 
      if(mp.isPlaying()){ 
       mp.pause(); 
       bv.setImageResource(R.drawable.playzz); 
      } else { 
       bv.setImageResource(R.drawable.pausezz); 
       for (int i=1; i<=10 ; i++){ 
       mp.start(); 
       } 
      } 
     } 

我想重复一首歌曲只有10次。我用于循环,但声音只播放一次,并停止。任何想法如何做到这一点? 在此先感谢。

回答

6

你应该在一个单独的线程做到这一点(假设MP是一个字段):

 mp.setOnCompletionListener(new OnCompletionListener() { 

      int n = 0; 

      @Override 
      public void onCompletion(MediaPlayer mp) { 
       if (n < 10) { 
        mp.start(); 
        n++; 
       } 
      } 
     }); 
     mp.start(); 

while(mp.isPlaying()); 

会吃你的CPU。

+0

谢谢,它工作:-) – 2013-02-24 15:15:48

+0

如果我想动态确定“10”会怎么样?我的意思是创建一个接一个地设置“x”播放的功能。 – 2013-06-16 08:18:31

+0

你应该为每次重新启动增加n。 – chengsam 2016-08-01 04:29:36

0

我相信这首歌没有等待第一次结束就开始播放10次,因此您需要做的是检查歌曲是否仍在播放,并且只有在播放停止后才会再次播放。也许是这样的 -

for (int i=1; i<=10 ; i++){ 
      mp.start(); 
      while(mp.isPlaying()); 
    } 

这将确保当前实例完成后才歌的下一个实例开始。你也需要在后台运行它,而不是在onClick上运行,这样它就不会中断任何其他的前台进程。

+0

感谢您的建议.. – 2013-02-24 15:17:31

+0

while(mPlayer.isPlaying()){Thread.sleep(3000);}可以保存循环。 – heMac 2013-11-02 04:39:48