2013-01-22 117 views
0

我有一個媒體播放器與ASSETS文件夾上的軌道,我想爲每首歌做一個開始/停止按鈕。我可以播放它,但是如果我再次點擊該按鈕,它不會停止音樂,它會在不停止第一個音樂的情況下啓動另一個:s。播放/停止mediaplayer不工作

這是我現在使用的代碼:

 public void onClick(View v) { 

     try { 
      AssetFileDescriptor afd = getAssets().openFd("4.mp3"); 
      player = new MediaPlayer(); 
      player.setDataSource(afd.getFileDescriptor(),afd.getStartOffset(),afd.getLength()); 
      player.prepare(); 
      if(player.isPlaying()){ 
       player.stop(); 
      } else { 
       player.start(); 
      } 
      } 
     catch (IllegalArgumentException e) { } 
     catch (IllegalStateException e) { } 
     catch (IOException e) { } 

    } 

編輯1:

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    player = new MediaPlayer(); 

    TextView sound4 = (TextView) findViewById(R.id.cancionCuatro); 
    sound4.setOnClickListener(soundFour); 

    try { 
     AssetFileDescriptor afd = getAssets().openFd("4.mp3"); 
     player.setDataSource(afd.getFileDescriptor(),afd.getStartOffset(),afd.getLength()); 
     player.prepare(); 
     } 
    catch (IllegalArgumentException e) { } 
    catch (IllegalStateException e) { } 
    catch (IOException e) { } 

} 

OnClickListener soundFour = new OnClickListener() { 

    public void onClick(View v) { 

     if(player.isPlaying()){ 
      player.stop(); 
     } else { 
      player.start(); 
     } 


    } 
};  

的logcat: 開始叫狀態0 錯誤(-38,0)

回答

0

這是因爲你的致電

player = new MediaPlayer(); 

這是創建mediaPlayer的一個新實例,而不是引用同一個實例來測試是否某個東西已經播放並且能夠阻止它。 在onClick之外移動新的MediaPlayer(),它應該表現自己。

+0

我試過了!它播放和停止罰款,但它不會再播放:( 看看編輯的代碼我有 – user1998633

0
try {if(player.isPlaying()){player.stop();} else {player.start();}if(player!=null) player.release();AssetFileDescriptor afd = getAssets().openFd("4.mp3");player = new MediaPlayer();player.setDataSource(afd.getFileDescriptor(),afd.getStartOffset(),afd.getLength());player.prepare(); } catch (IllegalArgumentException e) {} catch (IllegalStateException e) {} catch (IOException e) { }