MediaPlayer 循环冻结应用程序

时间:2021-04-11 08:51:31

标签: java android

问题: 我的代码有问题。我想循环我的 MediaPlayer,但是当我使用 while 循环时,MediaPlayer 正在播放,但应用程序被冻结。我知道,mediaplayer 有 setLooping 方法,但我必须使用 while 循环来实现,因为我需要在代码中更改声音。

有人知道它的解决方案是什么吗?谢谢。

代码:

    public void play() {
        while(true) {
            if (player == null) {
                player = MediaPlayer.create(context, R.raw.zvuk);
                player.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
                    @Override
                    public void onCompletion(MediaPlayer mp) {
                        stopPlayer();
                    }
                });
            }
            player.start();
        }
    }

    public void stopPlayer() {
        if (player != null) {
                player.release();
                player = null;
        }
    }
}

1 个答案:

答案 0 :(得分:2)

您正在使用无限循环,它永远不会结束。用这个替换你的代码:

public void play() {
            if (player == null) {
                player = MediaPlayer.create(context, R.raw.zvuk);
                player.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
                    @Override
                    public void onCompletion(MediaPlayer mp) {
                        // play again or write your logic for repeat 
                        play();
                    }
                });
            }
            player.start();
       
    }

    public void stopPlayer() {
        if (player != null) {
                player.release();
                player = null;
        }
    }
相关问题