2013-02-18 234 views
0

我想製作一個播放音頻1次播放音頻2次後播放音頻1次的程序 並再次播放音頻1次然後播放音頻3次,應用程序有一個按鈕要暫停和恢復當前音頻,並且每個音頻都會更改imageView,問題是每次我暫停音頻1時,音頻2也會播放,或者當前音頻停止並播放下一個音頻。我怎樣才能更好地控制音頻,我的意思是我想暫停當前的音頻,而另一個則要等到當前的音頻結束。如何暫停和恢復音頻

公共類PrincipalActivity擴展ClassePai {

Thread thread; 
private int currentPosition, duracaoTotal; 

private MediaPlayer avemaria, intro, primeiro, segundo, terceiro, quarto, 
     quinto, salve; 
private ImageView imagem; 
private Button btnProximo, btnAnterior, btnPause; 

protected Intent intent; 

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

    avemaria = MediaPlayer.create(this, R.raw.teste); 

    intro = MediaPlayer.create(this, R.raw.teste); 

    primeiro = MediaPlayer.create(this, R.raw.ave_maria); 

    segundo = MediaPlayer.create(this, R.raw.ave_maria); 

    terceiro = MediaPlayer.create(this, R.raw.terceiro_goz); 

    quarto = MediaPlayer.create(this, R.raw.quarto_goz); 

    quinto = MediaPlayer.create(this, R.raw.quinto_goz); 

    salve = MediaPlayer.create(this, R.raw.salve_bencao); 

    imagem = (ImageView) findViewById(id.imageViewGoz); 
    imagem.setImageResource(com.willamydotcom.osantoterco.R.drawable.g 
      + getContador()); 

    Thread thread = new Thread() { 

     public void run() { 

      play(primeiro); 

      // wait while the current audio plays 
      while (primeiro.isPlaying()) { 

      } 

      play(avemaria); 
      while (avemaria.isPlaying()) { 

      } 
      play(avemaria); 
      while (avemaria.isPlaying()) { 

      } 
      play(avemaria); 
      while (avemaria.isPlaying()) { 

      } 
      play(avemaria); 
      while (avemaria.isPlaying()) { 

      } 
      play(avemaria); 
      while (avemaria.isPlaying()) { 

      } 
      play(avemaria); 
      while (avemaria.isPlaying()) { 

      } 
      play(avemaria); 
      while (avemaria.isPlaying()) { 

      } 
      play(avemaria); 
      while (avemaria.isPlaying()) { 

      } 
      play(avemaria); 
      while (avemaria.isPlaying()) { 

      } 
      play(avemaria); 
      while (avemaria.isPlaying()) { 

      } 
      play(segundo); 
      while (avemaria.isPlaying()) { 

      } 

     } 

    }; 
    thread.start(); 

    btnProximo = (Button) findViewById(id.btnTest); 

    btnProximo.setOnClickListener(new OnClickListener() { 

     @Override 
     public void onClick(View arg0) { 

      if (avemaria.isPlaying()) { 

       avemaria.start(); 
      } else if (primeiro.isPlaying()) { 
       primeiro.start(); 
      } else if (segundo.isPlaying()) { 
       segundo.start(); 
      } 
     } 
    }); 

    btnPause = (Button) findViewById(id.btnPlay); 
    btnPause.setOnClickListener(new OnClickListener() { 

     @Override 
     public void onClick(View v) { 

      if (avemaria.isPlaying()) { 

       avemaria.pause(); 
      } else if (primeiro.isPlaying()) { 
       primeiro.pause(); 
      } else if (segundo.isPlaying()) { 
       segundo.pause(); 
      } 

     } 
    }); 

    btnAnterior = (Button) findViewById(id.btnAnterior); 
    btnAnterior.setOnClickListener(new OnClickListener() { 

     @Override 
     public void onClick(View v) { 

     } 

    }); 

} 

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    // Inflate the menu; this adds items to the action bar if it is present. 
    getMenuInflater().inflate(R.menu.activity_principal, menu); 
    return true; 
} 

public void play(MediaPlayer audio) { 
    audio.start(); 

    audio.setOnCompletionListener(new OnCompletionListener() { 

     @Override 
     public void onCompletion(MediaPlayer arg0) { 

      imagem.setImageResource(R.drawable.g + getContador()); 

      setContador(getContador() + 1); 

     } 
    }); 

} 

}

+0

你可以發佈一些你的代碼,所以我們可以看到你是如何把它放在一起的嗎? – 2013-02-18 19:51:56

+0

我確實把我的代碼! – RWillamy 2013-02-18 20:22:14

回答

0

首先,不要忘了打他們之前調用MediaPlayer.prepare素材上。

在每個play()函數之後,你不需要while循環 - 在你的播放函數中,你設置了一個OnCompletionListener--你可以把你的邏輯放在那裏,當你的一個音頻剪輯完成時,所以它只能在剪輯結束時播放,而不能在剪輯暫停時播放。看看中的MediaPlayer(http://developer.android.com/reference/android/media/MediaPlayer.html)提供的功能,特別是setAudioSessionId(你可以給每個剪輯的ID,這樣你可以知道哪些片段是完全在你的OnCompletionListener)

它實際上可能是最好只使用一個MediaPlayer對象並更改數據源(必要時使用setDataSource ...我沒有太多使用這個類,所以我不知道什麼是最好的方式來設置它。

+0

你能舉個例子嗎? – RWillamy 2013-02-19 11:08:56