使用 OnTouchListener 时应用意外停止,MotionEvent.ACTION_UP

App stops unexpectedly when using OnTouchListener, MotionEvent.ACTION_UP

所以我想创建一个按钮,只要按下它就会播放音乐,但是一旦松开,音乐就会停止。

在我的 createListeners() 中,我有以下内容:

b1.setOnTouchListener(new View.OnTouchListener() {
        @Override
        public boolean onTouch(View v, MotionEvent event) {
            if(event.getAction() == MotionEvent.ACTION_DOWN) {
                startBeat(1, m1);
                return true;
            } else if (event.getAction() == MotionEvent.ACTION_UP) {
                m1.stop();
            }
            return false;
        }
    });

m1是一个MediaPlayer,在方法startBeat中调用了m1.start()

当 运行 应用程序时,只要我不松开按钮,音乐就可以正常播放。然而,当我松开按钮时,应用程序说它意外停止了。是什么导致了这个问题?

还有其他方法可以实现此功能吗?

也许你再试试 MediaPlayer ??

Calling stop() stops playback and causes a MediaPlayer in the Started, Paused, Prepared or PlaybackCompleted state to enter the Stopped state. Once in the Stopped state, playback cannot be started until prepare() or prepareAsync() are called to set the MediaPlayer object to the Prepared state again.

如果不这样做,请尝试 m1.pause();m1.seekTo(0) 模拟停止...

public boolean onTouch(View v, MotionEvent event) {
    if(event.getAction() == MotionEvent.ACTION_DOWN) {
        startBeat(1, m1);
        return true;
    } else if (event.getAction() == MotionEvent.ACTION_UP) {
        m1.pause();
        m1.seekTo(0);
        return true;
    }
    return false;
}

编辑: 我发现我做错了什么。我在 startBeat 方法中初始化并启动 MediaPlayer,并在 onTouch 方法中停止播放器。一旦我将它全部移动到 onTouch 中,它就起作用了。所以我猜之前发生了一些奇怪的事情。感谢您的回答!