简体   繁体   English

Android:24次点击后声音无法播放

[英]Android:Sound doesn't play after 24th click

So I am a programming beginner and while making a simple soundboard app with 8 buttons, i got a strange problem where it stops playing sound after the 24th button press.Here's the java code: 因此,我是一名编程初学者,在制作带有8个按钮的简单音板应用程序时,遇到一个奇怪的问题,即在按下24个按钮后它停止播放声音。这是Java代码:

public class MainActivity extends AppCompatActivity {

    MediaPlayer mediaPlayer;
    int i = 0;
    public void playSound(View view){

            switch(view.getId())
            {
                case R.id.button1:
                    mediaPlayer = MediaPlayer.create(this, R.raw.doyouspeakenglish);
                    break;
                case R.id.button2:
                    mediaPlayer = MediaPlayer.create(this, R.raw.goodevening);
                    break;
                case R.id.button3:
                    mediaPlayer = MediaPlayer.create(this, R.raw.hello);
                    break;
                case R.id.button4:
                    mediaPlayer = MediaPlayer.create(this, R.raw.howareyou);
                    break;
                case R.id.button5:
                    mediaPlayer = MediaPlayer.create(this, R.raw.ilivein);
                    break;
                case R.id.button6:
                    mediaPlayer = MediaPlayer.create(this, R.raw.mynameis);
                    break;
                case R.id.button7:
                    mediaPlayer = MediaPlayer.create(this, R.raw.please);
                    break;
                case R.id.button8:
                    mediaPlayer = MediaPlayer.create(this, R.raw.welcome);
                    break;
                default:
                    throw new RuntimeException("Unknown button ID");
            }
            i++;
        Log.i("klik", Integer.toString(i));
            mediaPlayer.start();
    }

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

And here's the error message,I'm not allowed to post the image for being a new user so here's a link 这是错误消息,我不允许以新用户身份发布图像,因此这是一个链接

You are not releasing the media player resource , so you need to close and release them as well 您没有释放媒体播放器资源,因此也需要关闭并释放它们。

Releasing the MediaPlayer

public void playSound(View view){
        if (null != mediaPlayer) {
            mediaPlayer.stop();
            mediaPlayer.release();
        }

        switch(view.getId())
        {
            case R.id.button1:
                mediaPlayer = MediaPlayer.create(this, R.raw.doyouspeakenglish);
                break;
            case R.id.button2:
                mediaPlayer = MediaPlayer.create(this, R.raw.goodevening);
                break;
            case R.id.button3:
                mediaPlayer = MediaPlayer.create(this, R.raw.hello);
                break;
            case R.id.button4:
                mediaPlayer = MediaPlayer.create(this, R.raw.howareyou);
                break;
            case R.id.button5:
                mediaPlayer = MediaPlayer.create(this, R.raw.ilivein);
                break;
            case R.id.button6:
                mediaPlayer = MediaPlayer.create(this, R.raw.mynameis);
                break;
            case R.id.button7:
                mediaPlayer = MediaPlayer.create(this, R.raw.please);
                break;
            case R.id.button8:
                mediaPlayer = MediaPlayer.create(this, R.raw.welcome);
                break;
            default:
                throw new RuntimeException("Unknown button ID");
        }
        i++;
    Log.i("klik", Integer.toString(i));
        mediaPlayer.start();
}

Please read the Annotations on the Media Player: 请阅读媒体播放器上的注释:

When done with the MediaPlayer, you should call release(), to free the resources. 使用MediaPlayer完成后,应调用release()释放资源。 If not released, too many MediaPlayer instances will result in an exception. 如果未发布,那么太多MediaPlayer实例将导致异常。

So before calling MediaPlayer.create again just call 因此,在再次调用MediaPlayer.create之前,只需调用

mediaPlayer.stop();
mediaPlayer.release();

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM