我正在尝试在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)方法必须覆盖或实现超类型方法 我管理音乐播放长按,但发布错误或真实它没有停止音乐......我怎么能管理它...
答案 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;它工作正常。