2013-02-18 143 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