마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

webView 동영상 전체보기 실행 후 백버튼으로 전체보기 빠져 나오기2

0 추천
질문 내용이 길어어 1과 2로 나누어 올립니다.

동영상 전체화면 fullscreen 구현하는 부분입니다.
mWebView.setWebChromeClient(new FullscreenableChromeClient(MainActivity.this));

웹뷰가 있는 MainActivity 페이지에서 이렇게 불러와서 구현하고 있습니다.
아래는 전체 내용 입니다.

 

FullscreenableChromeClient.java 파일

 

import android.app.Activity;
import android.content.Context;
import android.os.Build;
import android.support.v4.content.ContextCompat;
import android.view.MotionEvent;
import android.view.View;
import android.view.ViewGroup;
import android.view.Window;
import android.view.WindowManager;
import android.webkit.WebChromeClient;
import android.widget.FrameLayout;

public class FullscreenableChromeClient extends WebChromeClient {
    private Activity mActivity = null;

    private View mCustomView;
    private WebChromeClient.CustomViewCallback mCustomViewCallback;
    private int mOriginalOrientation;
    private FrameLayout mFullscreenContainer;
    private static final FrameLayout.LayoutParams COVER_SCREEN_PARAMS = new FrameLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);

    public FullscreenableChromeClient(Activity activity) {
        this.mActivity = activity;
    }

    @Override
    public void onShowCustomView(View view, CustomViewCallback callback) {

        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH) {
            if (mCustomView != null) {
                callback.onCustomViewHidden();
                return;
            }

            mOriginalOrientation = mActivity.getRequestedOrientation();
            FrameLayout decor = (FrameLayout) mActivity.getWindow().getDecorView();
            mFullscreenContainer = new FullscreenHolder(mActivity);
            mFullscreenContainer.addView(view, COVER_SCREEN_PARAMS);
            decor.addView(mFullscreenContainer, COVER_SCREEN_PARAMS);
            mCustomView = view;
            setFullscreen(true);
            mCustomViewCallback = callback;
//          mActivity.setRequestedOrientation(requestedOrientation);

        }

        super.onShowCustomView(view, callback);
    }

    @SuppressWarnings("deprecation")
    @Override
    public void onShowCustomView(View view, int requestedOrientation, WebChromeClient.CustomViewCallback callback) {
        this.onShowCustomView(view, callback);
    }

    @Override
    public void onHideCustomView() {
        if (mCustomView == null) {
            return;
        }

        setFullscreen(false);
        FrameLayout decor = (FrameLayout) mActivity.getWindow().getDecorView();
        decor.removeView(mFullscreenContainer);
        mFullscreenContainer = null;
        mCustomView = null;
        mCustomViewCallback.onCustomViewHidden();
        mActivity.setRequestedOrientation(mOriginalOrientation);

    }

    private void setFullscreen(boolean enabled) {

        Window win = mActivity.getWindow();
        WindowManager.LayoutParams winParams = win.getAttributes();
        final int bits = WindowManager.LayoutParams.FLAG_FULLSCREEN;
        if (enabled) {
            winParams.flags |= bits;
        } else {
            winParams.flags &= ~bits;
            if (mCustomView != null) {
                mCustomView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_VISIBLE);
            }
        }
        win.setAttributes(winParams);
    }

    private static class FullscreenHolder extends FrameLayout {
        public FullscreenHolder(Context ctx) {
            super(ctx);
            setBackgroundColor(ContextCompat.getColor(ctx, android.R.color.black));
        }
        @Override
        public boolean onTouchEvent(MotionEvent evt) {
            return true;
        }
    }
}

웹뷰 화면에서 동영상 전체 보기를 클릭해서 보다가 백버튼을 누르면 페이지 돌아가기가 실행 됩니다.
서브페이지에서 동영상 전체 보기를 보다가 백버튼을 누르면 이전 페이지로 되돌아 갑니다.
아래는 웹뷰 백버튼 처리 부분 입니다.
<pre style="color: rgb(0, 0, 0); font-family: '굴림체'; font-size: 9pt; background-color: rgb(255, 255, 255);">    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {

        if (keyCode == KeyEvent.KEYCODE_BACK) {  // 웹뷰 처음 화면이면 두번 누르면 경고 띄우고 어플 종료 되는 조건 입니다.

            if (mWebView.getOriginalUrl().equalsIgnoreCase(MAIN_URL)) {  // 메인화면에서 처음 누르면 경고 띄우고
                if (!mFlag) {
                    Toast.makeText(this, "'뒤로'버튼을 한번 더 누르시면 종료됩니다.", Toast.LENGTH_SHORT).show();    // 종료안내 toast 를 출력
                    mFlag = true;
                    mHandler.sendEmptyMessageDelayed(0, 2000);    // 2000ms 만큼 딜레이
                    return false;
                } else { // 메인화면에서 누번 누르면 앱 종료 됩니다.
                    // 앱 종료 code
                    moveTaskToBack(true);
                    finish();
                    android.os.Process.killProcess(Process.myPid());
                }
            } else { // 서버 페아지에서 백버튼 누르면 이전 페이지로 되돌아 갑니다.
                // 뒤로 가기 실행
                if (mWebView.canGoBack()) {
                    mWebView.goBack();
                    return true;
                }
            }
        }
        return true;
    }</pre>
백버튼 처리에서 위의 내용은 이해를 했습니다.
질문
1.메인에서나 서브 화면에서 유튜브 동영상 전체보기 화면에서 백버튼을 누르면 동영상 전체보기 화면에서 빠져 나오게 하고 싶습니다.
위에서 아래 부분을 어떻게 고쳐야 하는지 도움 부탁드립니다. ㅜㅜ; 몇시간 째 삽질입니다.
public boolean onKeyDown(int keyCode, KeyEvent event) {
}
새해 복 많이 받으시고 건승을 빕니다.
익명사용자 님이 2019년 1월 1일 질문
2019년 1월 1일 수정

답변 달기

· 글에 소스 코드 보기 좋게 넣는 법
· 질문에 대해 추가적인 질문이나 의견이 있으면 답변이 아니라 댓글로 달아주시기 바랍니다.
표시할 이름 (옵션):
개인정보: 당신의 이메일은 이 알림을 보내는데만 사용됩니다.
스팸 차단 검사:
스팸 검사를 다시 받지 않으려면 로그인하거나 혹은 가입 하세요.
...