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

时间:2015-05-13 22:06:21

标签: java android ontouchlistener motionevent

所以我想创建播放音乐的按钮,只要它被按下,但一旦发布,音乐就会停止。

在我的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;
        }
    });

m1MediaPlayer,在方法startBeat中,m1.start()已被调用。

在运行应用程序时,只要我不释放按钮,音乐就可以正常播放。但是,当我释放按钮时,应用程序说它意外停止了。可能导致这个问题的原因是什么?

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

2 个答案:

答案 0 :(得分:0)

也许你再试一次MediaPlayer ??

  

调用stop()会停止播放并导致处于Started,Paused,Prepared或PlaybackCompleted状态的MediaPlayer进入Stopped状态。   一旦处于Stopped状态,在调用prepare()或prepareAsync()以将MediaPlayer 对象再次设置为Prepared状态之前,无法启动播放。

如果您不这样做,请尝试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;
}

答案 1 :(得分:0)

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