Android: how to call MediaController to fast forward and rewind using KeyEvents

Hi, I use the mediacontroller to control my media planner, I want to control the use of keyEvents, not touchevents, for this I use the code below, but only Play / Pause works, where KEYCODE_MEDIA_FAST_FORWARD and KEYCODE_MEDIA_REWIND are not processed when the mediacontroller view appears.

Can anyone suggest how to take care of fast-forwarding and rewinding using key events.

Please, help.

    public boolean onKeyDown(int keyCode, KeyEvent event) {
    mediaController.show();
    switch (keyCode) {
    case KeyEvent.KEYCODE_MEDIA_PLAY_PAUSE:
        if (mediaPlayer.isPlaying()) {
            pause();
        } else
            start();

        return true;
    case KeyEvent.KEYCODE_MEDIA_FAST_FORWARD: {
        if (mediaPlayer.isPlaying()) {
        currentPosition = mediaPlayer.getCurrentPosition();
        seekTo(currentPosition + 2000);
        }
    }
        return true;

    case KeyEvent.KEYCODE_MEDIA_REWIND: {
        if (mediaPlayer.isPlaying()) {
        currentPosition = mediaPlayer.getCurrentPosition();
        seekTo(currentPosition - 3000);
        }
    }
        return true;

    }
    return false;
}
+4
source share
1 answer

doForwardVideo() doRewindVideo() onClick onKeyDownEvent()

, !

public void doForwardVideo()
    {
         if (mPlayer == null) {
             return;
         }
         int pos = mPlayer.getCurrentPosition();
         pos += 15000; // milliseconds
         mPlayer.seekTo(pos);
         setProgress();

         show(sDefaultTimeout);
    }

    public void doRewindVideo()
    {
        if (mPlayer == null) {
            return;
        }

        int pos = mPlayer.getCurrentPosition();
        pos -= 5000; // milliseconds
        mPlayer.seekTo(pos);
        setProgress();

        show(sDefaultTimeout);
    }


    //*** Create two listeners which then you will set it in 
    //private void initControllerView(View v) method

    private View.OnClickListener mRewListener = new View.OnClickListener() {
        public void onClick(View v) {
            doRewindVideo();
        }
    };

    private View.OnClickListener mFfwdListener = new View.OnClickListener() {
        public void onClick(View v) {
            doForwardVideo();
        }
    };

//****** Here is snippet for private void initControllerView(View v) method

mFfwdButton = (ImageButton) v.findViewById(R.id.ffwd);
    if (mFfwdButton != null) {
        mFfwdButton.setOnClickListener(mFfwdListener);
        if (!mFromXml) {
            mFfwdButton.setVisibility(mUseFastForward ? View.VISIBLE : View.GONE);
        }
    }

    mRewButton = (ImageButton) v.findViewById(R.id.rew);
    if (mRewButton != null) {
        mRewButton.setOnClickListener(mRewListener);
        if (!mFromXml) {
            mRewButton.setVisibility(mUseFastForward ? View.VISIBLE : View.GONE);
        }
    }

//***** onKeyDown() Event ****
 @Override
    public boolean dispatchKeyEvent(KeyEvent event) {
        if (mPlayer == null) {
            return true;
        }

        int keyCode = event.getKeyCode();
        final boolean uniqueDown = event.getRepeatCount() == 0
                && event.getAction() == KeyEvent.ACTION_DOWN;
        if (keyCode ==  KeyEvent.KEYCODE_HEADSETHOOK
                || keyCode == KeyEvent.KEYCODE_MEDIA_PLAY_PAUSE
                || keyCode == KeyEvent.KEYCODE_SPACE) {
            if (uniqueDown) {
                doPauseResume();
                show(sDefaultTimeout);
                if (mPauseButton != null) {
                    mPauseButton.requestFocus();
                }
            }
            return true;
        } else if (keyCode == KeyEvent.KEYCODE_MEDIA_PLAY) {
            if (uniqueDown && !mPlayer.isPlaying()) {
                mPlayer.start();
                updatePausePlay();
                show(sDefaultTimeout);
            }
            return true;
        } else if (keyCode == KeyEvent.KEYCODE_MEDIA_STOP
                || keyCode == KeyEvent.KEYCODE_MEDIA_PAUSE) {
            if (uniqueDown && mPlayer.isPlaying()) {
                mPlayer.pause();
                updatePausePlay();
                show(sDefaultTimeout);
            }
            return true;
        } else if (keyCode == KeyEvent.KEYCODE_MEDIA_FAST_FORWARD) {
            if (uniqueDown) {
                doForwardVideo();
            }
            // don't show the controls for volume adjustment
            return true;
        } else if (keyCode == KeyEvent.KEYCODE_MEDIA_REWIND) {
            if (uniqueDown) {
                doRewindVideo();
            }
            // don't show the controls for volume adjustment
            return true;
        }else if (keyCode == KeyEvent.KEYCODE_VOLUME_DOWN
                || keyCode == KeyEvent.KEYCODE_VOLUME_UP
                || keyCode == KeyEvent.KEYCODE_VOLUME_MUTE) {
            // don't show the controls for volume adjustment
            return super.dispatchKeyEvent(event);
        } else if (keyCode == KeyEvent.KEYCODE_BACK || keyCode == KeyEvent.KEYCODE_MENU) {
            if (uniqueDown) {
                hide();
            }
            return true;
        }

        show(sDefaultTimeout);
        return super.dispatchKeyEvent(event);
    }
0

Source: https://habr.com/ru/post/1526932/


All Articles