WebView의 간편한 패키지 정보

10278 단어 AndroidWebView
전언
일상적인 개발 과정에서 우리는 WebView를 사용하여 HTML 페이지를 자주 불러온다. 샤오지가 최근에 한 두 프로젝트 중 HTML 파일을 불러와야 한다. 프로젝트 중 여러 곳에서 웹뷰를 사용했는데 봉인하지 않으면 코드량이 엄청날 것이다.정치책의 한 마디를 빌려 쓰면서 양적 변화가 없는데 어떻게 질적 변화가 있을 수 있겠는가?포장해 봤어요.
개관
Android WebView는 웹 페이지를 불러오는 캐리어 컨트롤러로 웹 페이지를 표시하는 과정에서 이벤트가 발생하여 웹 페이지를 불러오는 과정에서 프로그램이 처리하고자 하는 일을 할 수 있도록 프로그램에 리셋합니다.예를 들어 클라이언트는 웹 페이지 불러오는 진도, 웹 페이지 불러오는 오류 등 이벤트를 표시해야 한다.WebView는 두 개의 이벤트 리셋 클래스를 응용 층에 제공하는데 그것이 바로 WebView Client이다. WebChromeClient 개발자는 이 두 가지 클래스를 계승하여 해당하는 이벤트 처리를 인수할 수 있다.웹뷰 클라이언트는 주로 웹 페이지가 각 단계에 대한 알림을 제공한다. 예를 들어 웹 페이지가 onPageStarted를 불러오기 시작하고 웹 페이지가 onPageFinished를 불러오기 시작하는 등이다.웹크롬 클라이언트는 웹 페이지를 불러오는 과정에서 제공하는 데이터 내용을 주로 제공한다. 예를 들어 웹 페이지의 title,favicon 등을 되돌려준다.
WebView의 기본 사용
저도 소개를 많이 안 할게요. 코드를 소개해 주세요.
@Override
    protected void initView() {
        WebSettings webSettings = mWebView.getSettings();

        //        ,     、     
        mWebView.requestFocusFromTouch();
        mWebView.setOverScrollMode(View.OVER_SCROLL_NEVER);
        webSettings.setJavaScriptEnabled(true);  //  js
//        webSettings.setPluginsEnabled(true);  //    
//        webSettings.setPluginState(WebSettings.PluginState.ON);

        //       ,    
        webSettings.setUseWideViewPort(true);  //        webview   
        webSettings.setLoadWithOverviewMode(true); //         

        //webSettings.setSupportZoom(true);  //    ,   true。        。
        //webSettings.setBuiltInZoomControls(true); //         。
        //    false,  WebView    ,             。

        webSettings.setDisplayZoomControls(false); //         

        webSettings.setLayoutAlgorithm(WebSettings.LayoutAlgorithm.SINGLE_COLUMN); //        
        webSettings.supportMultipleWindows();  //   
        webSettings.setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK);  //  webview   
        webSettings.setAllowFileAccess(true);  //        
        webSettings.setNeedInitialFocus(true); // webview  requestFocus  webview    
        webSettings.setJavaScriptCanOpenWindowsAutomatically(true); //    JS     
        webSettings.setLoadsImagesAutomatically(true);  //        
        webSettings.setDefaultTextEncodingName("utf-8");//      
        mWebView.addJavascriptInterface(new ToastCallbacker(), "callbacker");
        mWebView.setWebViewClient(new WebViewClient() {
            @Override
            public boolean shouldOverrideUrlLoading(WebView view, String url) {
                String token = AccountManager.getInstance().getAccessToken();
                Map extraHeaders = new HashMap<>();
                extraHeaders.put("CH-TOKEN", token);
                view.loadUrl(url, extraHeaders);
                return true;
            }
        });
        /*WebViewClient mWebViewClient = new WebViewClient() {
            @Override
            public boolean shouldOverrideUrlLoading(WebView view, String url) {
                //     ,     。
                //                ,             。
                //    url,  url.contains(“add”),      
                return super.shouldOverrideUrlLoading(view, url);
            }

            @Override
            public boolean shouldOverrideKeyEvent(WebView view, KeyEvent event) {
                //                    。
                return super.shouldOverrideKeyEvent(view, event);
            }

            @Override
            public void onPageStarted(WebView view, String url, Bitmap favicon) {
                //               ,        loading   ,             。
                super.onPageStarted(view, url, favicon);
            }

            @Override
            public void onPageFinished(WebView view, String url) {
                //          。    ,      loading  ,      。
                super.onPageFinished(view, url);
                view.loadUrl("javascript:myFunction()");
            }

            @Override
            public void onLoadResource(WebView view, String url) {
                //            ,     (    )         。
                super.onLoadResource(view, url);
            }

            @Override
            public void onReceivedError(WebView view, WebResourceRequest request, WebResourceError error) {
                // (      )
                super.onReceivedError(view, request, error);
            }

            @Override
            public void doUpdateVisitedHistory(WebView view, String url, boolean isReload) {
                //(      )
                super.doUpdateVisitedHistory(view, url, isReload);
            }

            @Override
            public void onFormResubmission(WebView view, Message dontResend, Message resend) {
                //(            )
                super.onFormResubmission(view, dontResend, resend);
            }

            @Override
            public void onReceivedHttpAuthRequest(WebView view, HttpAuthHandler handler, String host, String realm) {
                //(          )
                super.onReceivedHttpAuthRequest(view, handler, host, realm);
            }

            @Override
            public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) {
                //        webview  https  。
                super.onReceivedSslError(view, handler, error);
            }

            @Override
            public void onScaleChanged(WebView view, float oldScale, float newScale) {
                // (WebView       )
                super.onScaleChanged(view, oldScale, newScale);
            }

            @Override
            public void onUnhandledInputEvent(WebView view, InputEvent event) {
                //(Key         )
                super.onUnhandledInputEvent(view, event);
            }
        };
        mWebView.setWebViewClient(mWebViewClient);*/

        WebChromeClient mWebChromeClient = new WebChromeClient() {

            //         ,       TextView   
            @Override
            public void onProgressChanged(WebView view, int newProgress) {
                if (newProgress < 100) {
                    String progress = newProgress + "%";
                } else {
                }
            }

            //  Web   title          title
            //        ,     ,  onReceiveTitle              ,
            //       onReceiveError ,        title
            @Override
            public void onReceivedTitle(WebView view, String title) {
                //WebActivity.this.setTitle(title);
            }

            @Override
            public void onReceivedIcon(WebView view, Bitmap icon) {
                //
            }

            @Override
            public boolean onCreateWindow(WebView view, boolean isDialog, boolean isUserGesture, Message resultMsg) {
                //
                return true;
            }

            @Override
            public void onCloseWindow(WebView window) {
            }

            //  alert   ,html        
            @Override
            public boolean onJsAlert(WebView view, String url, String message, JsResult result) {
                //
                return true;
            }

            //  confirm   
            @Override
            public boolean onJsPrompt(WebView view, String url, String message, String defaultValue,
                                      JsPromptResult result) {
                //
                return true;
            }

            //  prompt   
            @Override
            public boolean onJsConfirm(WebView view, String url, String message, JsResult result) {
                //
                return true;
            }
        };
        mWebView.setWebChromeClient(mWebChromeClient);
    }
WebView에 대한 기본 설정
 public class ToastCallbacker extends WebActivity {

        @JavascriptInterface
        public void showToast(final String msg) {
            new Handler(Looper.getMainLooper()).post(new Runnable() {
                @Override
                public void run() {
                    Toast.makeText(WebActivity.this, msg, Toast.LENGTH_LONG).show();
                }
            });
        }

        @JavascriptInterface
        public void LoginToast() {
            LoginActivity.start();
        }

        @JavascriptInterface
        public void registerToast() {
            SignUpActivity.startSignUp();
        }
    }
@Override
    protected void onDestroy() {
        super.onDestroy();
        //System.exit(0);
    }
우리는 앱 공유를 할 때 웹뷰를 공유하여 음악 재생 컨트롤이 있는 웹 페이지를 불러옵니다.공유 인터페이스가 뜨면 웹뷰의 웹 페이지가 백엔드 상태에 있거나 닫힐 때 음악 소리가 재생됩니다.이런 현상이 나타나면 우리는 용납할 수 없고 사용자에게도 좋지 않은 인상을 줄 수 있다. 인터넷에는 몇 가지 해결 방법이 있지만 모두 뜻대로 되지 않는 부분이 있다. 오늘 우리는 그것을 어떻게 더 잘 해결할 수 있는지 이야기하자.
솔루션:
 @Override
    protected void onPause() {
        mWebView.reload();//             
        super.onPause();
    }
이렇게 하면 WebView에 대한 설정이 완성되었지만, 단지 이렇게 해서는 안 된다. 우리가 불러온 HTML은 어떤 것은 네트워크에 있고, 어떤 것은 로컬이기 때문에 받아들인 데이터도 처리해야 한다.
먼저 점프 방법을 봅시다.
private static final String KEY_TITLE = "title";
private static final String KEY_FILE = "file";
public static final Pair ABOUT = Pair.create("    ", "file:///android_asset/about.html");
public static final Pair PROTOCOL = Pair.create("    ", "file:///android_asset/protocol.html");
public static final Pair PRIVATE = Pair.create("    ", "file:///android_asset/copyright.html");
public static final Pair COMMON_QUESTION =
            new Pair<>("    ", "file:///android_asset/commonQuestion.html");
public static void start(Pair pair) {
        Intent intent = new Intent(AppUtils.getAppContext(), WebActivity.class);
        intent.putExtra(KEY_TITLE, pair.first);
        intent.putExtra(KEY_FILE, pair.second);
        AppUtils.startActivity(intent);
    }

    @Override
    protected void initData() {
        Intent intent = getIntent();
        String title = intent.getStringExtra(KEY_TITLE);
        String file = intent.getStringExtra(KEY_FILE);
        mTvTitle.setText(title);
        mWebView.loadUrl(file);
    }
이렇게 큰일이 났다!

좋은 웹페이지 즐겨찾기