2012-08-05 119 views
1

我正在使用一個按鈕「音樂」與2個動作PLAY和STOP,當我第一次點擊音樂播放時,然後當我再次點擊它停止。但是,當我第二次點擊時,所有動作PLAY/STOP都不起作用。如何再次播放/停止mediaplayer?

public class Home extends Activity { 
     boolean isMediaOn=false; 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 


     final ImageButton music=(ImageButton)findViewById(R.id.music); 
     final MediaPlayer sound=MediaPlayer.create(Accueil.this,R.raw.star);  

     music.setOnClickListener(new OnClickListener() { 
     public void onClick(View v) { 

         // play 
       if(isMediaOn==false) 
       { 

       System.out.println("PLAY"); 

       sound.start(); 

       music.setImageResource(R.drawable.music); 

       isMediaOn=true; 
       } 
         // stop 
       else 
       { 

       System.out.println("STOP"); 
       if(sound.isPlaying()){ 
        sound.reset(); 
        sound.stop(); 

       } 

       music.setImageResource(R.drawable.no_music); 

       isMediaOn=false; 
       } 

     } 
     }); 

這裏是我的logcat的截圖: enter image description here

回答

0

你只允許調用stop()當玩家處於狀態STARTEDPREPAREDPAUSEDPLAYBACK_COMPLETE。您的reset()呼叫將其重置爲IDLE狀態,導致stop()失敗。

+0

那麼如何解決這個問題呢? – Angelika 2012-08-05 17:50:45

+1

@Angelika:取決於你想要完成的事情。例如,你爲什麼要調用'reset()'?根據當前狀態,請參閱http://developer.android.com/reference/android/media/MediaPlayer.html瞭解您可以到達哪些狀態。在你的情況下,你可能會用'pause'替代你的'reset' +'stop'(根據你所尋找的行爲,可能後面跟着'seekTo(0)')。 – Michael 2012-08-05 18:35:09

0

你可能想使用暫停(),如sound.pause();

的pause()方法暫停播放,並保持所有其他球員的狀態(如所播放的文件,在文件中的位置等)。

+0

其實我不想使用「暫停」動作,只是在應用程序中啓用/禁用聲音 – Angelika 2012-08-05 17:49:51

+0

爲什麼你不想使用暫停? – ajacian81 2012-11-10 11:31:10

0

http://developer.android.com/reference/android/media/MediaPlayer.html#stop但應當清楚地指出, 「一旦處於停止狀態時,播放不能啓動,直到準備()或prepareAsync()被稱爲重新設置MediaPlayer對象到準備狀態」。

public class Home extends Activity { 
    boolean isMediaOn=false; 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 


    final ImageButton music=(ImageButton)findViewById(R.id.music); 
    final MediaPlayer sound=MediaPlayer.create(Accueil.this,R.raw.star);  

    music.setOnClickListener(new OnClickListener() { 
    public void onClick(View v) { 

        // play 
      if(isMediaOn==false) 
      { 

      System.out.println("PLAY"); 
      try { 
       sound.prepare(); 
      } catch (Exception e) { 
      Log.d(Settings.debug, e.toString()); 
      } 
      sound.start(); 

      music.setImageResource(R.drawable.music); 

      isMediaOn=true; 
      } 
        // stop 
      else 
      { 

      System.out.println("STOP"); 
      if(sound.isPlaying()){ 
       sound.reset(); 
       sound.stop(); 

      } 

      music.setImageResource(R.drawable.no_music); 

      isMediaOn=false; 
      } 

    } 
    }); 
-1

試試這個,希望這對你有所幫助。

final ImageButton music=(ImageButton)findViewById(R.id.music); 
    final MediaPlayer sound=MediaPlayer.create(Accueil.this,R.raw.star); 
    music.setOnClickListener(new OnClickListener() { 

    public void onClick(View v) { 
     if(sound.isPlaying()){ 
      sound.stop(); 
      music.setImageResource(R.drawable.no_music); 

     } else { 
     sound.start(); 
     music.setImageResource(R.drawable.music); 

     } 
    });