【问题标题】:Mediaplayer stops playing after playing a few timesMediaplayer 播放几次后停止播放
【发布时间】:2014-04-18 15:35:14
【问题描述】:

我有一个按钮,按下它会播放随机声音片段,然后播放另一个声音片段,然后通过一个媒体播放器播放另一个声音片段,但是在多次按下按钮(15-20 次)后,所有音频都会停止。我在播放最后一个音频剪辑后释放媒体播放器,所以我不认为这是原因。有什么指点吗?

public class Main extends Activity {


MediaPlayer mp;
Button generate;

@Override
protected void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    generate = (Button) findViewById(R.id.sound);

}

public void youSir (View view)
{
    generate.setVisibility(View.INVISIBLE);
    Random randomGenerator = new Random();
    int randomInt = randomGenerator.nextInt(3) + 1;
    switch (randomInt){
    case 1: mp = MediaPlayer.create(this, R.raw.beg); mp.start();
    break;
    case 2: mp = MediaPlayer.create(this, R.raw.begone); mp.start();
    break;
    case 3: mp = MediaPlayer.create(this, R.raw.begtwo); mp.start();
    break;
    }
    mp.setOnCompletionListener(new OnCompletionListener(){
        // @Override
        public void onCompletion(MediaPlayer arg0) {

            audioTwo();
         }
    });

}


protected void audioTwo() {
    // TODO Auto-generated method stub
    Random randomGenerator = new Random();
    int randomInt = randomGenerator.nextInt(3) + 1;
    switch (randomInt){
    case 1: mp = MediaPlayer.create(this, R.raw.start); mp.start();
    break;
    case 2: mp = MediaPlayer.create(this, R.raw.end); mp.start();
    break;
    case 3: mp = MediaPlayer.create(this, R.raw.mid); mp.start();
    break;
    }
    mp.setOnCompletionListener(new OnCompletionListener(){
        // @Override
        public void onCompletion(MediaPlayer arg0) {
            audioThree();
         }
    });
}

protected void audioThree() {
    // TODO Auto-generated method stub
    Random randomGenerator = new Random();
    int randomInt = randomGenerator.nextInt(3) + 1;
    switch (randomInt){
    case 1: mp = MediaPlayer.create(this, R.raw.three); mp.start();
    break;
    case 2: mp = MediaPlayer.create(this, R.raw.two); mp.start();
    break;
    case 3: mp = MediaPlayer.create(this, R.raw.one); mp.start();
    break;
    mp.setOnCompletionListener(new OnCompletionListener(){
        // @Override
        public void onCompletion(MediaPlayer arg0) {
            mp.stop();
            mp.release();
            generate.setVisibility(View.VISIBLE);
         }
    });
}

【问题讨论】:

    标签: java android eclipse audio media-player


    【解决方案1】:

    这是一个有点老的问题,但我会尝试回答,以防其他人遇到类似问题。

    您的音频资源不足。该代码实际上并未释放所有MediaPlayer 实例。它每次运行只释放三分之一。 audioTwo()audioThree 将新的 MediaPlayer 实例分配给 mp 变量,但它们不会释放已经存储在那里的实例。执行以下操作:

    protected void audioTwo() {
        // RELEASING PREVIOUS MEDIAPLAYER
        mp.release();
    
        Random randomGenerator = new Random();
        int randomInt = randomGenerator.nextInt(3) + 1;
        switch (randomInt){
        case 1: mp = MediaPlayer.create(this, R.raw.start); mp.start();
        break;
        ...
    

    audioThree() 也是如此。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-29
      • 1970-01-01
      • 1970-01-01
      • 2012-09-15
      相关资源
      最近更新 更多