웹뷰에서는 뒤로 가기를 눌렀을때 이전 페이지로 가지 않고, 앱이 닫혀 버리는 현상이 발생 합니다.


이를 위해서 별도의 처리를 해줘야 합니다.






1. MainActiviey 자바 클래스에서 다음을 추가 해줍니다.



public class MainActivity extends AppCompatActivity {


    WebView mWebView;

    TextView errorVeiw;


    @Override

    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_main);



        //푸시프로세스(FCM)

        FirebaseMessaging.getInstance().subscribeToTopic("notice");




        //에러메시지 내보낼 텍스트뷰

        errorVeiw = (TextView) findViewById(R.id.net_error_view);




        //웹페이지

        mWebView = (WebView) findViewById(R.id.activity_main_webview);


        WebSettings webSettings = mWebView.getSettings();

        webSettings.setJavaScriptEnabled(true);


        mWebView.setWebViewClient(new WebViewClient() {


            @Override

            public boolean shouldOverrideUrlLoading(WebView view, String url) {

                view.loadUrl(url);

                return true;

            }


            //네트워크연결에러

            @Override

            public void onReceivedError(WebView view, int errorCode,String description, String failingUrl) {


                switch(errorCode) {

                    case ERROR_AUTHENTICATION: break;               // 서버에서 사용자 인증 실패

                    case ERROR_BAD_URL: break;                           // 잘못된 URL

                    case ERROR_CONNECT: break;                          // 서버로 연결 실패

                    case ERROR_FAILED_SSL_HANDSHAKE: break;    // SSL handshake 수행 실패

                    case ERROR_FILE: break;                                  // 일반 파일 오류

                    case ERROR_FILE_NOT_FOUND: break;               // 파일을 찾을 수 없습니다

                    case ERROR_HOST_LOOKUP: break;           // 서버 또는 프록시 호스트 이름 조회 실패

                    case ERROR_IO: break;                              // 서버에서 읽거나 서버로 쓰기 실패

                    case ERROR_PROXY_AUTHENTICATION: break;   // 프록시에서 사용자 인증 실패

                    case ERROR_REDIRECT_LOOP: break;               // 너무 많은 리디렉션

                    case ERROR_TIMEOUT: break;                          // 연결 시간 초과

                    case ERROR_TOO_MANY_REQUESTS: break;     // 페이지 로드중 너무 많은 요청 발생

                    case ERROR_UNKNOWN: break;                        // 일반 오류

                    case ERROR_UNSUPPORTED_AUTH_SCHEME: break; // 지원되지 않는 인증 체계

                    case ERROR_UNSUPPORTED_SCHEME: break;          // URI가 지원되지 않는 방식

                }

                super.onReceivedError(view, errorCode, description, failingUrl);


                mWebView.setVisibility(View.GONE);

                errorVeiw.setVisibility(View.VISIBLE);

            }

        });





        mWebView.setWebChromeClient(new WebChromeClient() {


            //alert 처리

            @Override

            public boolean onJsAlert(WebView view, String url, String message, final JsResult result) {

                new AlertDialog.Builder(view.getContext())

                        .setTitle("알림")

                        .setMessage(message)

                        .setPositiveButton(android.R.string.ok,

                                new AlertDialog.OnClickListener(){

                                    public void onClick(DialogInterface dialog, int which) {

                                        result.confirm();

                                    }

                                })

                        .setCancelable(false)

                        .create()

                        .show();

                return true;

            }



            //confirm 처리

            @Override

            public boolean onJsConfirm(WebView view, String url, String message,

                                       final JsResult result) {

                new AlertDialog.Builder(view.getContext())

                        .setTitle("알림")

                        .setMessage(message)

                        .setPositiveButton("Yes",

                                new AlertDialog.OnClickListener(){

                                    public void onClick(DialogInterface dialog, int which) {

                                        result.confirm();

                                    }

                                })

                        .setNegativeButton("No",

                                new AlertDialog.OnClickListener(){

                                    public void onClick(DialogInterface dialog, int which) {

                                        result.cancel();

                                    }

                                })

                        .setCancelable(false)

                        .create()

                        .show();

                return true;

            }

        });



        mWebView.loadUrl("http://papaya9.co.kr/m2");



    }



    @Override

    public boolean onKeyDown(int keyCode, KeyEvent event) {

        if (keyCode == KeyEvent.KEYCODE_BACK) {

            if (mWebView.canGoBack()) {

                mWebView.goBack();

                return false;

            }

        }


        return super.onKeyDown(keyCode, event);

    }



}

 













[목차]


1. 프로젝트 생성 하기 - 안드로이드 모바일웹으로 하이브리드앱 만들기 1


2. 푸시 사용 준비하기 (FCM) - 안드로이드 모바일웹으로 하이브리드앱 만들기 2


3. 푸시 기능 만들기 (FCM) - 안드로이드 모바일웹으로 하이브리드앱 만들기 3


4. 푸시 테스트 하기 - 안드로이드 모바일웹으로 하이브리드앱 만들기 4


5. 웹뷰추가하기 - 안드로이드 모바일웹으로 하이브리드앱 만들기 5


6. 웹뷰에서 자바스크립트 동작 처리하기 - 안드로이드 모바일웹으로 하이브리드앱 만들기 6


7. 뒤로 버튼 눌렀을때 동작 처리하기 - 안드로이드 모바일웹으로 하이브리드앱 만들기 7


8. 인트로(스플레시) 만들기 - 안드로이드 모바일웹으로 하이브리드앱 만들기 8


9. 아이콘 설정하기 - 안드로이드 모바일웹으로 하이브리드앱 만들기 9


10. 테스트용 APK 추출하기 - 안드로이드 모바일웹으로 하이브리드앱 만들기 10









copyright (c) 2017 워크식스

+ Recent posts