1

下面的代码不会破坏方法或循环,而是永远循环播放音乐。当(n==maxCount)它应该改变 OnCompletionListener 的值n=1并从 OnCompletionListener 出来时,即音乐应该停止播放,这就是我想要的。

我怎样才能解决这个问题 ?

    protected void playsound() {
    mp.setOnCompletionListener(new OnCompletionListener() {
        @Override
        public void onCompletion(MediaPlayer mp) {
            if (n<=maxCount) {
                mp.start();
                n++;
                if(n==maxCount){
                    n=1;
                    return;
                }
            }
        }
    });
    mp.start();

maxCount 值取决于 Spinner 值并n=1在全局范围内声明。

下面是它完美运行的更正代码,下面的代码有什么错误吗?因为一些用户说“使用此代码,您将面临错过退出条件的危险,因为如果您输入时 n == maxCount,则在您 n++ 之后 n > maxCount。简而言之,它会一直运行直到您达到 maxint,然后它会崩溃”?

protected void playsound() {
    // TODO Auto-generated method stub
    mp.setOnCompletionListener(new OnCompletionListener() {
        @Override
        public void onCompletion(MediaPlayer mp) {
            if (n<=maxCount) {
                mp.start();
                n++;
                if(n==maxCount){
                    n=1;
                    mp.pause();
                    mp.seekTo(0);

                }
            }
        }
    });
    mp.start();
}
4

3 回答 3

1

我认为您需要mp.start()在内部 if 之后放置。由于您每次都开始播放音乐,它总是会回到onCompletion,即使在播放 maxCount 之后也可以再次开始播放,因为您正在设置n=1;

    public void onCompletion(MediaPlayer mp) {
        if (n < maxCount) {
            n++;
            if(n == maxCount){
                n = 1;
                return;
            }
            mp.start();
        }
    }
于 2013-03-25T18:18:00.367 回答
1

问题是你在哪里运行mp.start()。将其移至 else ,如下所示:

if (n<maxCount) {
    n++;
    if(n==maxCount){
        // Don't play the sound anymore.
        n=1;
        return;
    } else {
        // Continue playing the sound.
        mp.start();
    }
}

您遇到的问题是您检查了if(n==maxCount),但是您以任何一种方式播放声音,然后您将 n 重置为 1 以便它继续播放。

于 2013-03-25T18:16:57.537 回答
1

编辑:

你不能用mp.start();你需要的音乐来mp.stop()代替


你正在检查 if (n<maxCount) {

在您正在检查的相同条件下n==maxCount,世界上的值如何小于等于该数字的数字,即n==maxCount永远不会满足,因此您需要像这样更改条件

if(n<=maxCount)

下面的代码不会破坏方法或循环,而是永远循环音乐

是的,因为您的 return 语句永远不会满足 n==maxCount

于 2013-03-25T18:08:13.423 回答