2014-09-01 267 views
0

我正在开发一个应用程序,它包含一个实现ViewPager和3个片段的MainActivity。我定义了MainActivity中的所有逻辑方法,这些片段只是实现了UI引用的方法。当触摸屏停止mediaplayer

所以在MainActivity我有一个方法,其中一些hapens并开始在MediaPlayer这样:

mp = MediaPlayer.create(MainActivity.this, R.raw.alarm); 
try { 
    mp.setLooping(true); 
} catch (IllegalStateException e) { 
    e.printStackTrace(); 
} 
mp.start(); 

这得到播放的声音进入一个循环。现在,我需要能够阻止它只是触摸屏,我已经实现了的onTouchEvent()方法是这样的:

@Override 
public boolean onTouchEvent (MotionEvent event) { 
    if (event.getAction() == MotionEvent.ACTION_DOWN) { 
     /*If sound is playing, stops*/ 
     if (mp.isPlaying()) { 
      mp.stop(); 
     } 
     return true; 
    } 
    return super.onTouchEvent(event); 
} 

这里是问题。我无法让声音停止,所以我想上面的方法不起作用。 SO成员已经要求我使用dispatchTouchEvent()而不是onTouchEvent(),但这样做会强制关闭应用程序,而不会在LogCat中引发任何错误消息。

@Override 
public boolean dispatchTouchEvent (MotionEvent event) { 
    if (event.getAction() == MotionEvent.ACTION_DOWN) { 
     /*If sound is playing, stops*/ 
     if (mp.isPlaying()) { 
      mp.stop(); 
     } 
     return true; 
    } 
    return super.dispatchTouchEvent(event); 
} 

所以我不知道那个方法有什么问题。或者,也许问题可能是这必须在每个片段而不是MainAcitivity中实现?

更新

我与日食的问题,它dind't显示logcat的信息,但现在就解决了,这就是它抛出:

09-01 16:43:15.591: E/InputEventReceiver(30873): Exception dispatching input event. 
09-01 16:43:15.591: E/MessageQueue-JNI(30873): Exception in MessageQueue callback: handleReceiveCallback 
09-01 16:43:15.591: E/MessageQueue-JNI(30873): java.lang.NullPointerException 
09-01 16:43:15.591: E/MessageQueue-JNI(30873): at com.itest.MainActivity.dispatchTouchEvent(MainActivity.java:818) 
09-01 16:43:15.591: E/MessageQueue-JNI(30873): at android.support.v7.app.ActionBarActivityDelegateICS$WindowCallbackWrapper.dispatchTouchEvent(ActionBarActivityDelegateICS.java:260) 
09-01 16:43:15.591: E/MessageQueue-JNI(30873): at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.java:2228) 
09-01 16:43:15.591: E/MessageQueue-JNI(30873): at android.view.View.dispatchPointerEvent(View.java:8315) 
09-01 16:43:15.591: E/MessageQueue-JNI(30873): at android.view.ViewRootImpl$ViewPostImeInputStage.processPointerEvent(ViewRootImpl.java:4596) 
09-01 16:43:15.591: E/MessageQueue-JNI(30873): at android.view.ViewRootImpl$ViewPostImeInputStage.onProcess(ViewRootImpl.java:4464) 
09-01 16:43:15.591: E/MessageQueue-JNI(30873): at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:4022) 
09-01 16:43:15.591: E/MessageQueue-JNI(30873): at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:4076) 
09-01 16:43:15.591: E/MessageQueue-JNI(30873): at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:4045) 
09-01 16:43:15.591: E/MessageQueue-JNI(30873): at android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:4156) 
09-01 16:43:15.591: E/MessageQueue-JNI(30873): at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:4053) 
09-01 16:43:15.591: E/MessageQueue-JNI(30873): at android.view.ViewRootImpl$AsyncInputStage.apply(ViewRootImpl.java:4213) 
09-01 16:43:15.591: E/MessageQueue-JNI(30873): at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:4022) 
09-01 16:43:15.591: E/MessageQueue-JNI(30873): at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:4076) 
09-01 16:43:15.591: E/MessageQueue-JNI(30873): at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:4045) 
09-01 16:43:15.591: E/MessageQueue-JNI(30873): at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:4053) 
09-01 16:43:15.591: E/MessageQueue-JNI(30873): at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:4022) 
09-01 16:43:15.591: E/MessageQueue-JNI(30873): at android.view.ViewRootImpl.deliverInputEvent(ViewRootImpl.java:6403) 
09-01 16:43:15.591: E/MessageQueue-JNI(30873): at android.view.ViewRootImpl.doProcessInputEvents(ViewRootImpl.java:6307) 
09-01 16:43:15.591: E/MessageQueue-JNI(30873): at android.view.ViewRootImpl.enqueueInputEvent(ViewRootImpl.java:6278) 
09-01 16:43:15.591: E/MessageQueue-JNI(30873): at android.view.ViewRootImpl.enqueueInputEvent(ViewRootImpl.java:6243) 
09-01 16:43:15.591: E/MessageQueue-JNI(30873): at android.view.ViewRootImpl$WindowInputEventReceiver.onInputEvent(ViewRootImpl.java:6483) 
09-01 16:43:15.591: E/MessageQueue-JNI(30873): at android.view.InputEventReceiver.dispatchInputEvent(InputEventReceiver.java:185) 
09-01 16:43:15.591: E/MessageQueue-JNI(30873): at android.os.MessageQueue.nativePollOnce(Native Method) 
09-01 16:43:15.591: E/MessageQueue-JNI(30873): at android.os.MessageQueue.next(MessageQueue.java:138) 
09-01 16:43:15.591: E/MessageQueue-JNI(30873): at android.os.Looper.loop(Looper.java:123) 
09-01 16:43:15.591: E/MessageQueue-JNI(30873): at android.app.ActivityThread.main(ActivityThread.java:5356) 
09-01 16:43:15.591: E/MessageQueue-JNI(30873): at java.lang.reflect.Method.invokeNative(Native Method) 
09-01 16:43:15.591: E/MessageQueue-JNI(30873): at java.lang.reflect.Method.invoke(Method.java:515) 
09-01 16:43:15.591: E/MessageQueue-JNI(30873): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1265) 
09-01 16:43:15.591: E/MessageQueue-JNI(30873): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1081) 
09-01 16:43:15.591: E/MessageQueue-JNI(30873): at dalvik.system.NativeStart.main(Native Method) 
09-01 16:43:15.591: D/AndroidRuntime(30873): Shutting down VM 
09-01 16:43:15.601: W/dalvikvm(30873): threadid=1: thread exiting with uncaught exception (group=0x4180bda0) 
09-01 16:43:15.601: E/AndroidRuntime(30873): FATAL EXCEPTION: main 
09-01 16:43:15.601: E/AndroidRuntime(30873): Process: com.itest, PID: 30873 
09-01 16:43:15.601: E/AndroidRuntime(30873): java.lang.NullPointerException 
09-01 16:43:15.601: E/AndroidRuntime(30873): at com.itest.MainActivity.dispatchTouchEvent(MainActivity.java:818) 
09-01 16:43:15.601: E/AndroidRuntime(30873): at android.support.v7.app.ActionBarActivityDelegateICS$WindowCallbackWrapper.dispatchTouchEvent(ActionBarActivityDelegateICS.java:260) 
09-01 16:43:15.601: E/AndroidRuntime(30873): at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.java:2228) 
09-01 16:43:15.601: E/AndroidRuntime(30873): at android.view.View.dispatchPointerEvent(View.java:8315) 
09-01 16:43:15.601: E/AndroidRuntime(30873): at android.view.ViewRootImpl$ViewPostImeInputStage.processPointerEvent(ViewRootImpl.java:4596) 
09-01 16:43:15.601: E/AndroidRuntime(30873): at android.view.ViewRootImpl$ViewPostImeInputStage.onProcess(ViewRootImpl.java:4464) 
09-01 16:43:15.601: E/AndroidRuntime(30873): at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:4022) 
09-01 16:43:15.601: E/AndroidRuntime(30873): at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:4076) 
09-01 16:43:15.601: E/AndroidRuntime(30873): at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:4045) 
09-01 16:43:15.601: E/AndroidRuntime(30873): at android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:4156) 
09-01 16:43:15.601: E/AndroidRuntime(30873): at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:4053) 
09-01 16:43:15.601: E/AndroidRuntime(30873): at android.view.ViewRootImpl$AsyncInputStage.apply(ViewRootImpl.java:4213) 
09-01 16:43:15.601: E/AndroidRuntime(30873): at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:4022) 
09-01 16:43:15.601: E/AndroidRuntime(30873): at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:4076) 
09-01 16:43:15.601: E/AndroidRuntime(30873): at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:4045) 
09-01 16:43:15.601: E/AndroidRuntime(30873): at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:4053) 
09-01 16:43:15.601: E/AndroidRuntime(30873): at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:4022) 
09-01 16:43:15.601: E/AndroidRuntime(30873): at android.view.ViewRootImpl.deliverInputEvent(ViewRootImpl.java:6403) 
09-01 16:43:15.601: E/AndroidRuntime(30873): at android.view.ViewRootImpl.doProcessInputEvents(ViewRootImpl.java:6307) 
09-01 16:43:15.601: E/AndroidRuntime(30873): at android.view.ViewRootImpl.enqueueInputEvent(ViewRootImpl.java:6278) 
09-01 16:43:15.601: E/AndroidRuntime(30873): at android.view.ViewRootImpl.enqueueInputEvent(ViewRootImpl.java:6243) 
09-01 16:43:15.601: E/AndroidRuntime(30873): at android.view.ViewRootImpl$WindowInputEventReceiver.onInputEvent(ViewRootImpl.java:6483) 
09-01 16:43:15.601: E/AndroidRuntime(30873): at android.view.InputEventReceiver.dispatchInputEvent(InputEventReceiver.java:185) 
09-01 16:43:15.601: E/AndroidRuntime(30873): at android.os.MessageQueue.nativePollOnce(Native Method) 
09-01 16:43:15.601: E/AndroidRuntime(30873): at android.os.MessageQueue.next(MessageQueue.java:138) 
09-01 16:43:15.601: E/AndroidRuntime(30873): at android.os.Looper.loop(Looper.java:123) 
09-01 16:43:15.601: E/AndroidRuntime(30873): at android.app.ActivityThread.main(ActivityThread.java:5356) 
09-01 16:43:15.601: E/AndroidRuntime(30873): at java.lang.reflect.Method.invokeNative(Native Method) 
09-01 16:43:15.601: E/AndroidRuntime(30873): at java.lang.reflect.Method.invoke(Method.java:515) 
09-01 16:43:15.601: E/AndroidRuntime(30873): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1265) 
09-01 16:43:15.601: E/AndroidRuntime(30873): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1081) 
09-01 16:43:15.601: E/AndroidRuntime(30873): at dalvik.system.NativeStart.main(Native Method) 

凡在MainActivity线818指的onTouchEvent()或dispatchTouchEvent()方法,正是这条线:

if (mp.isPlaying()) { 
+0

What's line MainActivity.java:818?它引发NPE – 2014-09-02 11:48:12

+0

@Dhruti,问题更新 – masmic 2014-09-02 11:48:49

+0

查看答案。 “mp”最初可能为空。把条件处理。你已经完成:) – 2014-09-02 11:52:54

回答

1

你得到NullPointerException在线

if (mp.isPlaying()) { 

mp必须为空当您最初触摸屏。

补充一点:

if (mp != null && mp.isPlaying()) { 

希望这有助于。

+0

现在它不强制使用dispatchTouchEvent()时关闭,但屏幕触摸不起作用。我需要能够选择一个编辑文本在那里写,并且在触摸时不会做任何事 – masmic 2014-09-02 11:58:09

+0

可能你已经在dispatchTouchEvent中返回了true。仅当您的mp.isPlaying返回true时才返回true。像'if(mp!= null && mp.isPlaying()){mp.stop();返回true;}'@ma​​smic – 2014-09-02 12:01:25

+0

@masmic任何进度? – 2014-09-02 12:20:29