【问题标题】:OnLongClickListener - play() music - return stop()OnLongClickListener - play() 音乐 - 返回 stop()
【发布时间】:2014-03-03 10:30:42
【问题描述】:

我正在尝试在 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) 方法必须覆盖或实现超类型方法 我管理音乐在长按上播放,但在发布 false 或 true 时它并没有停止音乐...我该如何管理它...

【问题讨论】:

  • 该错误表示您正在尝试覆盖超类中不退出(或无法覆盖)的方法。 Activity 没有 onLongClick
  • 我不认为您可以在 MediaPlayer 上实现 onLongClicklistener。您可以在某些视图上实现它。为某些视图(如按钮等)实现它
  • 您是要暂停/恢复还是停止/播放?

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


【解决方案1】:

我让它与 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;
} }

这是错误

致命异常:main java.lang.NullPointerException at app.technozed.dogwhistle.MainActivity.onTouch(MainActivity.java:68) 在 android.view.View.dispatchTouchEvent(View.java:3762) 在 android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:863) 在 android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:863) 在 android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:863) 在 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) 在 com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.java:1715) 在 android.view.ViewRoot.handleMessage(ViewRoot.java:1787) 在 android.os.Handler.dispatchMessage(Handler.java:99) 在 android.os.Looper.loop(Looper.java:123) 在 android.app.ActivityThread.main(ActivityThread.java:4633) 在 java.lang.reflect.Method.invokeNative(Native Method) 在 java.lang.reflect.Method.invoke(Method.java:521) 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:858) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) 在 dalvik.system.NativeStart.main(Native Method)

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

是的,我刚刚删除了 mp1=null;而且效果很好。

【讨论】:

  • 是的,这是因为 mp1 为空。在 ACTION_UP 上将其设置为 null 后,您没有对其进行初始化。
  • 您是要暂停/恢复还是停止/播放?
【解决方案2】:

您的代码将在启动后立即停止播放器,因为两个动作(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;   
} 

【讨论】:

  • 它甚至不播放。
  • 你没有粘贴初始化播放器的代码,所以我在那个地方添加了一条评论。在这里初始化你的播放器://初始化mp1 ...
  • 我在 onCreate 中初始化了播放器,之后我有 5 个按钮可以加载 5 首不同的歌曲,毕竟我有 1 个带有 onLongClickListener 的播放按钮。
  • 如果你能把你的完整的代码会更有帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-09-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多