2012-04-07 40 views
1

我正在嘗試爲較長的音頻文件創建一個音板,並且無法弄清楚如何停止音頻文件並在不關閉活動的情況下再次啓動它。假設每個音頻文件都是一分鐘長。如果我播放第一個音頻文件20秒並開始下一個音頻文件,則第一個停止播放,第二個開始播放。但是,如果我再次單擊第一個音頻文件,則第二個會停止播放,第一個則不會。我需要幫助。這讓我瘋狂。Android - 循環活動重複MediaPlayer

bAudio1 = (ImageButton) findViewById(R.id.bAudio1); 
    bAudio2 = (ImageButton) findViewById(R.id.bAudio2); 

    mpAudio1 = MediaPlayer.create(this, R.raw.audio1); 
    mpAudio2 = MediaPlayer.create(this, R.raw.audio2); 

    bAudio1.setOnClickListener(new View.OnClickListener() { 
      public void onClick(View v) { 
        if(mpAudio1.isPlaying()) { 
          mpAudio1.stop(); 
        } else { 
          if(mpAudio2.isPlaying()) { mpAudio2.stop(); } 
          mpAudio1.start(); 
        } 
      } 
    }); 

    bAudio2.setOnClickListener(new View.OnClickListener() { 
      public void onClick(View v) { 
        if(mpAudio2.isPlaying()) { 
          mpAudio2.stop(); 
        } else { 
          if(mpAudio1.isPlaying()) { mpAudio1.stop(); } 
          mpAudio2.start(); 
        } 
      } 
    }); 

回答

1

這爲我工作:

public class ExampleActivity extends Activity implements OnClickListener { 

private Button button1; 
private Button button2; 
private MediaPlayer mediaPlayer1; 
private MediaPlayer mediaPlayer2; 

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

    button1 = (Button) findViewById(R.id.button1); 
    button1.setOnClickListener(this); 
    button2 = (Button) findViewById(R.id.button2); 
    button2.setOnClickListener(this); 
} 

@Override 
public void onClick(View v) { 
    switch (v.getId()) { 
    case R.id.button1: 
     // play first audio clip and stop the second if playing 
     if (mediaPlayer2 != null && mediaPlayer2.isPlaying()) { 
      mediaPlayer2.stop(); 
      mediaPlayer2.release(); 
      mediaPlayer2 = null; 
     } 
     mediaPlayer1 = MediaPlayer.create(this, R.raw.song1); 
     mediaPlayer1.start(); 
     break; 
    case R.id.button2: 
     // play second audio clip and stop the first if playing 
     if (mediaPlayer1 != null && mediaPlayer1.isPlaying()) { 
      mediaPlayer1.stop(); 
      mediaPlayer1.release(); 
      mediaPlayer1 = null; 
     } 
     mediaPlayer2 = MediaPlayer.create(this, R.raw.song2); 
     mediaPlayer2.start(); 
     break; 
    } 
} 

@Override 
protected void onPause() { 
    super.onPause(); 

    // stop the second if playing 
    if (mediaPlayer2 != null && mediaPlayer2.isPlaying()) { 
     mediaPlayer2.stop(); 
     mediaPlayer2.release(); 
     mediaPlayer2 = null; 
    } 

    // stop the first if playing 
    if (mediaPlayer1 != null && mediaPlayer1.isPlaying()) { 
     mediaPlayer1.stop(); 
     mediaPlayer1.release(); 
     mediaPlayer1 = null; 
    } 
} 
+0

我拿出。準備(),因爲我沒有設定一個數據源,但你需要包括它,如果你決定讀離歌一份文件。 http://developer.android.com/reference/android/media/MediaPlayer.html#prepare()此外,我遺漏了停止從啓動按鈕的歌曲的邏輯。這應該可以抽象出另一個按鈕恕我直言。 – 2012-04-07 06:03:25