2011-09-07 103 views
1

我试图让它按照我想要的方式工作,它只是不会让我觉得我在某些时候已经有了它,但我正在尝试修复其他内容并更改了一些内容,搞砸了。基本上我是这个按钮是一个播放按钮。它应该通过另一个线程运行媒体播放器,以便它更快地响应和缓冲。问题是在它播放到最后,我点击播放结束并继续运行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 onCompletion(),mp.stop()试了一下,mp.release()以及在不同的测试中尝试lastPlayed.release()。以及没有他们在那里,它只是按钮更改和进度栏重置。如果你知道如何解决这个问题并使其重播,我会非常感激它。或者如果你知道如何让线程停止并重新启动一些,以便我可以让它回忆并重新执行线程,那也可以工作(atm,当它已经被尝试时它崩溃,因为线程已经启动)。谢谢,我感谢任何意见。

+0

那么没有人想回答,我不能回答我自己的问题,但如果有人想知道我确实弄清楚了。与playClick有关。我在onCompletion中将它设置为2。还拿出了mp.reset()。它现在运作良好。 – steven

回答

1
mp.setOnCompletionListener(new OnCompletionListener(){ 

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

         } 

        });