OnLongClickListener - 播放()音乐 - 返回停止()

时间:2014-03-03 10:30:42

标签: android audio-player onlongclicklistener android-music-player

我正在尝试在MediaPlayer上实现OnLongClickListener,但我无法弄清楚如何管理Release按钮来停止音乐。

这是我现在的代码。

@Override
public boolean onLongClick(View v, MotionEvent event) {
     if (event.getAction() == MotionEvent.ACTION_DOWN) {
            if (v.getId() == R.id.play) {
                mp1.setLooping(true);
                mp1.start();             }
                                                         } 
     else if (event.getAction() == MotionEvent.ACTION_UP) {
            if (v.getId() == R.id.play) {
                if (mp1 != null) {
                    mp1.setLooping(false);
                    mp1.pause(); 
                    mp1 = null;
                }

}    }

        return false; }

但它给了我错误 MainActivity类型的onLongClick(View,MotionEvent)方法必须覆盖或实现超类型方法 我管理音乐播放长按,但发布错误或真实它没有停止音乐......我怎么能管理它...

2 个答案:

答案 0 :(得分:0)

您的代码将在启动后立即停止播放,因为在触地和释放时分别触发了两个动作(Action Down和Action Up)。

试试这个:

@Override
public boolean onLongClick(View v, MotionEvent event) {
     if (event.getAction() == MotionEvent.ACTION_DOWN) {
            if (v.getId() == R.id.play) {
               if(mp1!=null && mp1.isPlaying())
                mp1.setLooping(false);
                    mp1.pause(); 
                    mp1 = null;

              }else{
                // initialize mp1 ... Initialize your player here
                //
                mp1.setLooping(true);
                mp1.start(); 

           }
       }
      return false;   
} 

答案 1 :(得分:0)

我使用onTouch方法,它工作一次,但在第二次点击我得到nullpointerexception

    public boolean onTouch(View v, MotionEvent event) {
    if (event.getAction() == MotionEvent.ACTION_DOWN) {
        if (v.getId() == R.id.play) {
            mp1.setLooping(true);
            mp1.start(); 
        }
    } else if (event.getAction() == MotionEvent.ACTION_UP) {
        if (v.getId() == R.id.play) {
            if (mp1 != null) {
                mp1.setLooping(false);
                mp1.pause(); 
                mp1 = null;
            }
        }
    }
    return false;
} }

这是错误

  

FATAL EXCEPTION:主java.lang.NullPointerException at   app.technozed.dogwhistle.MainActivity.onTouch(MainActivity.java:68)at at   android.view.View.dispatchTouchEvent(View.java:3762)at   android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:863)at   android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:863)at   android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:863)at   com.android.internal.policy.impl.PhoneWindow $ DecorView.superDispatchTouchEvent(PhoneWindow.java:1731)   在   com.android.internal.policy.impl.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1120)   在android.app.Activity.dispatchTouchEvent(Activity.java:2086)at   com.android.internal.policy.impl.PhoneWindow $ DecorView.dispatchTouchEvent(PhoneWindow.java:1715)   在android.view.ViewRoot.handleMessage(ViewRoot.java:1787)at   android.os.Handler.dispatchMessage(Handler.java:99)at   android.os.Looper.loop(Looper.java:123)at   android.app.ActivityThread.main(ActivityThread.java:4633)at   java.lang.reflect.Method.invokeNative(Native Method)at   java.lang.reflect.Method.invoke(Method.java:521)at   com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:858)   在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)at   dalvik.system.NativeStart.main(原生方法)

我认为这是因为暂停我设置mp1 = null;不是吗?

是的,我只是删除了mp1 = null;它工作正常。