Webview打開本地圖片選擇器

Webview打開本地圖片選擇器解決方案

Webview打開本地圖片選擇器十分之麻煩,其在安卓系統3x 4x 5x上的行爲都不同,處理也不同,所以之前差點崩潰。經過測試和完善,最終其在各個版本上都能完美工作,特此開源出來,希望能幫到大家

  • Webview
  • FileChooser
  • 返回鍵處理
  • Android3.0之前版本
  • Android3.x版本
  • Android4.x版本
  • Android5.x版本

代碼塊

<code class="language-python hljs  has-numbering" style="display: block; padding: 0px; background-color: transparent; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-top-left-radius: 0px; border-top-right-radius: 0px; border-bottom-right-radius: 0px; border-bottom-left-radius: 0px; word-wrap: normal; background-position: initial initial; background-repeat: initial initial;">public <span class="hljs-class" style="box-sizing: border-box;"><span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">class</span> <span class="hljs-title" style="box-sizing: border-box; color: rgb(102, 0, 102);">BrowserActivity</span> <span class="hljs-title" style="box-sizing: border-box; color: rgb(102, 0, 102);">extends</span> <span class="hljs-title" style="box-sizing: border-box; color: rgb(102, 0, 102);">BaseActivity</span> {
    <span class="hljs-title" style="box-sizing: border-box; color: rgb(102, 0, 102);">public</span> <span class="hljs-title" style="box-sizing: border-box; color: rgb(102, 0, 102);">ValueCallback</span><<span class="hljs-title" style="box-sizing: border-box; color: rgb(102, 0, 102);">Uri</span>> <span class="hljs-title" style="box-sizing: border-box; color: rgb(102, 0, 102);">mUploadMessage</span>;
    <span class="hljs-title" style="box-sizing: border-box; color: rgb(102, 0, 102);">public</span> <span class="hljs-title" style="box-sizing: border-box; color: rgb(102, 0, 102);">ValueCallback</span><<span class="hljs-title" style="box-sizing: border-box; color: rgb(102, 0, 102);">Uri</span>[]> <span class="hljs-title" style="box-sizing: border-box; color: rgb(102, 0, 102);">mUploadMessageForAndroid5</span>;

    <span class="hljs-title" style="box-sizing: border-box; color: rgb(102, 0, 102);">public</span> <span class="hljs-title" style="box-sizing: border-box; color: rgb(102, 0, 102);">final</span> <span class="hljs-title" style="box-sizing: border-box; color: rgb(102, 0, 102);">static</span> <span class="hljs-title" style="box-sizing: border-box; color: rgb(102, 0, 102);">int</span> <span class="hljs-title" style="box-sizing: border-box; color: rgb(102, 0, 102);">FILECHOOSER_RESULTCODE</span> = 1;
    <span class="hljs-title" style="box-sizing: border-box; color: rgb(102, 0, 102);">public</span> <span class="hljs-title" style="box-sizing: border-box; color: rgb(102, 0, 102);">final</span> <span class="hljs-title" style="box-sizing: border-box; color: rgb(102, 0, 102);">static</span> <span class="hljs-title" style="box-sizing: border-box; color: rgb(102, 0, 102);">int</span> <span class="hljs-title" style="box-sizing: border-box; color: rgb(102, 0, 102);">FILECHOOSER_RESULTCODE_FOR_ANDROID_5</span> = 2;



    @<span class="hljs-title" style="box-sizing: border-box; color: rgb(102, 0, 102);">Bind</span><span class="hljs-params" style="color: rgb(102, 0, 102); box-sizing: border-box;">(R.id.webview)</span>
    <span class="hljs-title" style="box-sizing: border-box; color: rgb(102, 0, 102);">WebView</span> <span class="hljs-title" style="box-sizing: border-box; color: rgb(102, 0, 102);">webView</span>;

    @<span class="hljs-title" style="box-sizing: border-box; color: rgb(102, 0, 102);">Bind</span><span class="hljs-params" style="color: rgb(102, 0, 102); box-sizing: border-box;">(R.id.titleBar)</span>
    <span class="hljs-title" style="box-sizing: border-box; color: rgb(102, 0, 102);">View</span> <span class="hljs-title" style="box-sizing: border-box; color: rgb(102, 0, 102);">view</span>;

    <span class="hljs-title" style="box-sizing: border-box; color: rgb(102, 0, 102);">ProgressDialog</span> <span class="hljs-title" style="box-sizing: border-box; color: rgb(102, 0, 102);">progressBar</span>;

    @<span class="hljs-title" style="box-sizing: border-box; color: rgb(102, 0, 102);">Override</span>
    <span class="hljs-title" style="box-sizing: border-box; color: rgb(102, 0, 102);">protected</span> <span class="hljs-title" style="box-sizing: border-box; color: rgb(102, 0, 102);">void</span> <span class="hljs-title" style="box-sizing: border-box; color: rgb(102, 0, 102);">setRootView</span><span class="hljs-params" style="color: rgb(102, 0, 102); box-sizing: border-box;">()</span> {
        <span class="hljs-title" style="box-sizing: border-box; color: rgb(102, 0, 102);">super</span>.<span class="hljs-title" style="box-sizing: border-box; color: rgb(102, 0, 102);">setRootView</span><span class="hljs-params" style="color: rgb(102, 0, 102); box-sizing: border-box;">()</span>;
        <span class="hljs-title" style="box-sizing: border-box; color: rgb(102, 0, 102);">setContentView</span><span class="hljs-params" style="color: rgb(102, 0, 102); box-sizing: border-box;">(R.layout.activity_browser)</span>;
    }

    @<span class="hljs-title" style="box-sizing: border-box; color: rgb(102, 0, 102);">Override</span>
    <span class="hljs-title" style="box-sizing: border-box; color: rgb(102, 0, 102);">protected</span> <span class="hljs-title" style="box-sizing: border-box; color: rgb(102, 0, 102);">void</span> <span class="hljs-title" style="box-sizing: border-box; color: rgb(102, 0, 102);">initData</span><span class="hljs-params" style="color: rgb(102, 0, 102); box-sizing: border-box;">()</span> {
        <span class="hljs-title" style="box-sizing: border-box; color: rgb(102, 0, 102);">super</span>.<span class="hljs-title" style="box-sizing: border-box; color: rgb(102, 0, 102);">initData</span><span class="hljs-params" style="color: rgb(102, 0, 102); box-sizing: border-box;">()</span>;
    }

    @<span class="hljs-title" style="box-sizing: border-box; color: rgb(102, 0, 102);">Override</span>
    <span class="hljs-title" style="box-sizing: border-box; color: rgb(102, 0, 102);">protected</span> <span class="hljs-title" style="box-sizing: border-box; color: rgb(102, 0, 102);">void</span> <span class="hljs-title" style="box-sizing: border-box; color: rgb(102, 0, 102);">initWidget</span><span class="hljs-params" style="color: rgb(102, 0, 102); box-sizing: border-box;">()</span> {
        <span class="hljs-title" style="box-sizing: border-box; color: rgb(102, 0, 102);">super</span>.<span class="hljs-title" style="box-sizing: border-box; color: rgb(102, 0, 102);">initWidget</span><span class="hljs-params" style="color: rgb(102, 0, 102); box-sizing: border-box;">()</span>;

        <span class="hljs-title" style="box-sizing: border-box; color: rgb(102, 0, 102);">progressBar</span> = <span class="hljs-title" style="box-sizing: border-box; color: rgb(102, 0, 102);">new</span> <span class="hljs-title" style="box-sizing: border-box; color: rgb(102, 0, 102);">ProgressDialog</span><span class="hljs-params" style="color: rgb(102, 0, 102); box-sizing: border-box;">(this)</span>;
        <span class="hljs-title" style="box-sizing: border-box; color: rgb(102, 0, 102);">progressBar</span>.<span class="hljs-title" style="box-sizing: border-box; color: rgb(102, 0, 102);">setProgressStyle</span><span class="hljs-params" style="color: rgb(102, 0, 102); box-sizing: border-box;">(ProgressDialog.STYLE_SPINNER)</span>;

        <span class="hljs-title" style="box-sizing: border-box; color: rgb(102, 0, 102);">webView</span>.<span class="hljs-title" style="box-sizing: border-box; color: rgb(102, 0, 102);">getSettings</span><span class="hljs-params" style="color: rgb(102, 0, 102); box-sizing: border-box;">()</span>.<span class="hljs-title" style="box-sizing: border-box; color: rgb(102, 0, 102);">setJavaScriptEnabled</span><span class="hljs-params" style="color: rgb(102, 0, 102); box-sizing: border-box;">(true)</span>;
        <span class="hljs-title" style="box-sizing: border-box; color: rgb(102, 0, 102);">webView</span>.<span class="hljs-title" style="box-sizing: border-box; color: rgb(102, 0, 102);">getSettings</span><span class="hljs-params" style="color: rgb(102, 0, 102); box-sizing: border-box;">()</span>.<span class="hljs-title" style="box-sizing: border-box; color: rgb(102, 0, 102);">setAppCacheEnabled</span><span class="hljs-params" style="color: rgb(102, 0, 102); box-sizing: border-box;">(false)</span>;
        <span class="hljs-title" style="box-sizing: border-box; color: rgb(102, 0, 102);">webView</span>.<span class="hljs-title" style="box-sizing: border-box; color: rgb(102, 0, 102);">getSettings</span><span class="hljs-params" style="color: rgb(102, 0, 102); box-sizing: border-box;">()</span>.<span class="hljs-title" style="box-sizing: border-box; color: rgb(102, 0, 102);">setCacheMode</span><span class="hljs-params" style="color: rgb(102, 0, 102); box-sizing: border-box;">(WebSettings.LOAD_NO_CACHE)</span>;

        <span class="hljs-title" style="box-sizing: border-box; color: rgb(102, 0, 102);">webView</span>.<span class="hljs-title" style="box-sizing: border-box; color: rgb(102, 0, 102);">loadUrl</span><span class="hljs-params" style="color: rgb(102, 0, 102); box-sizing: border-box;">(getIntent<span class="hljs-params" style="box-sizing: border-box;">()</span>.getStringExtra<span class="hljs-params" style="box-sizing: border-box;">(CommonKeys.url.name<span class="hljs-params" style="box-sizing: border-box;">()</span>)</span>)</span>;
        <span class="hljs-title" style="box-sizing: border-box; color: rgb(102, 0, 102);">webView</span>.<span class="hljs-title" style="box-sizing: border-box; color: rgb(102, 0, 102);">setWebViewClient</span><span class="hljs-params" style="color: rgb(102, 0, 102); box-sizing: border-box;">(new WebViewClient<span class="hljs-params" style="box-sizing: border-box;">()</span> {
            @Override
            public boolean shouldOverrideUrlLoading<span class="hljs-params" style="box-sizing: border-box;">(WebView view, String url)</span> {
                //handler.sendEmptyMessage<span class="hljs-params" style="box-sizing: border-box;">(<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0</span>)</span>;
                view.loadUrl<span class="hljs-params" style="box-sizing: border-box;">(url)</span>;
                return true;
            }
        })</span>;
        <span class="hljs-title" style="box-sizing: border-box; color: rgb(102, 0, 102);">webView</span>.<span class="hljs-title" style="box-sizing: border-box; color: rgb(102, 0, 102);">setWebChromeClient</span><span class="hljs-params" style="color: rgb(102, 0, 102); box-sizing: border-box;">(
                new WebChromeClient<span class="hljs-params" style="box-sizing: border-box;">()</span> {
                    public void onProgressChanged<span class="hljs-params" style="box-sizing: border-box;">(WebView view, int progress)</span> {// 載入進度改變而觸發
                        if <span class="hljs-params" style="box-sizing: border-box;">(progress == <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">100</span>)</span> {
                            //handler.sendEmptyMessage<span class="hljs-params" style="box-sizing: border-box;">(<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">1</span>)</span>;// 如果全部載入,隱藏進度對話框
                        }

                        super.onProgressChanged<span class="hljs-params" style="box-sizing: border-box;">(view, progress)</span>;
                    }

                    //擴展支持alert事件
                    @Override
                    public boolean onJsAlert<span class="hljs-params" style="box-sizing: border-box;">(WebView view, String url, String message, JsResult result)</span> {
                        AlertDialog.Builder builder = new AlertDialog.Builder<span class="hljs-params" style="box-sizing: border-box;">(view.getContext<span class="hljs-params" style="box-sizing: border-box;">()</span>)</span>;
                        builder.setTitle<span class="hljs-params" style="box-sizing: border-box;">(<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"xxx提示"</span>)</span>.setMessage<span class="hljs-params" style="box-sizing: border-box;">(message)</span>.setPositiveButton<span class="hljs-params" style="box-sizing: border-box;">(<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"確定"</span>, null)</span>;
                        builder.setCancelable<span class="hljs-params" style="box-sizing: border-box;">(false)</span>;
                        builder.setIcon<span class="hljs-params" style="box-sizing: border-box;">(R.drawable.ic_launcher)</span>;
                        AlertDialog dialog = builder.create<span class="hljs-params" style="box-sizing: border-box;">()</span>;
                        dialog.show<span class="hljs-params" style="box-sizing: border-box;">()</span>;
                        result.confirm<span class="hljs-params" style="box-sizing: border-box;">()</span>;
                        return true;
                    }

                    //擴展瀏覽器上傳文件
                    //<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">3.0</span>++版本
                    public void openFileChooser<span class="hljs-params" style="box-sizing: border-box;">(ValueCallback<Uri> uploadMsg, String acceptType)</span> {
                        openFileChooserImpl<span class="hljs-params" style="box-sizing: border-box;">(uploadMsg)</span>;
                    }

                    //<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">3.0</span>--版本
                    public void openFileChooser<span class="hljs-params" style="box-sizing: border-box;">(ValueCallback<Uri> uploadMsg)</span> {
                        openFileChooserImpl<span class="hljs-params" style="box-sizing: border-box;">(uploadMsg)</span>;
                    }

                    public void openFileChooser<span class="hljs-params" style="box-sizing: border-box;">(ValueCallback<Uri> uploadMsg, String acceptType, String capture)</span> {
                        openFileChooserImpl<span class="hljs-params" style="box-sizing: border-box;">(uploadMsg)</span>;
                    }

                    // For Android > <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">5.0</span>
                    public boolean onShowFileChooser <span class="hljs-params" style="box-sizing: border-box;">(WebView webView, ValueCallback<Uri[]> uploadMsg, WebChromeClient.FileChooserParams fileChooserParams)</span> {
                        openFileChooserImplForAndroid5<span class="hljs-params" style="box-sizing: border-box;">(uploadMsg)</span>;
                        return true;
                    }
                }
        )</span>;


        <span class="hljs-title" style="box-sizing: border-box; color: rgb(102, 0, 102);">webView</span>.<span class="hljs-title" style="box-sizing: border-box; color: rgb(102, 0, 102);">addJavascriptInterface</span><span class="hljs-params" style="color: rgb(102, 0, 102); box-sizing: border-box;">(new BrowserInterface<span class="hljs-params" style="box-sizing: border-box;">(this)</span>, <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"BrowserInterface"</span>)</span>;
    }

    <span class="hljs-title" style="box-sizing: border-box; color: rgb(102, 0, 102);">private</span> <span class="hljs-title" style="box-sizing: border-box; color: rgb(102, 0, 102);">void</span> <span class="hljs-title" style="box-sizing: border-box; color: rgb(102, 0, 102);">openFileChooserImpl</span><span class="hljs-params" style="color: rgb(102, 0, 102); box-sizing: border-box;">(ValueCallback<Uri> uploadMsg)</span> {
        <span class="hljs-title" style="box-sizing: border-box; color: rgb(102, 0, 102);">mUploadMessage</span> = <span class="hljs-title" style="box-sizing: border-box; color: rgb(102, 0, 102);">uploadMsg</span>;
        <span class="hljs-title" style="box-sizing: border-box; color: rgb(102, 0, 102);">Intent</span> <span class="hljs-title" style="box-sizing: border-box; color: rgb(102, 0, 102);">i</span> = <span class="hljs-title" style="box-sizing: border-box; color: rgb(102, 0, 102);">new</span> <span class="hljs-title" style="box-sizing: border-box; color: rgb(102, 0, 102);">Intent</span><span class="hljs-params" style="color: rgb(102, 0, 102); box-sizing: border-box;">(Intent.ACTION_GET_CONTENT)</span>;
        <span class="hljs-title" style="box-sizing: border-box; color: rgb(102, 0, 102);">i</span>.<span class="hljs-title" style="box-sizing: border-box; color: rgb(102, 0, 102);">addCategory</span><span class="hljs-params" style="color: rgb(102, 0, 102); box-sizing: border-box;">(Intent.CATEGORY_OPENABLE)</span>;
        <span class="hljs-title" style="box-sizing: border-box; color: rgb(102, 0, 102);">i</span>.<span class="hljs-title" style="box-sizing: border-box; color: rgb(102, 0, 102);">setType</span><span class="hljs-params" style="color: rgb(102, 0, 102); box-sizing: border-box;">(<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"image/*"</span>)</span>;
        <span class="hljs-title" style="box-sizing: border-box; color: rgb(102, 0, 102);">startActivityForResult</span><span class="hljs-params" style="color: rgb(102, 0, 102); box-sizing: border-box;">(Intent.createChooser<span class="hljs-params" style="box-sizing: border-box;">(i, <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"File Chooser"</span>)</span>, FILECHOOSER_RESULTCODE)</span>;
    }

    <span class="hljs-title" style="box-sizing: border-box; color: rgb(102, 0, 102);">private</span> <span class="hljs-title" style="box-sizing: border-box; color: rgb(102, 0, 102);">void</span> <span class="hljs-title" style="box-sizing: border-box; color: rgb(102, 0, 102);">openFileChooserImplForAndroid5</span><span class="hljs-params" style="color: rgb(102, 0, 102); box-sizing: border-box;">(ValueCallback<Uri[]> uploadMsg)</span> {
        <span class="hljs-title" style="box-sizing: border-box; color: rgb(102, 0, 102);">mUploadMessageForAndroid5</span> = <span class="hljs-title" style="box-sizing: border-box; color: rgb(102, 0, 102);">uploadMsg</span>;
        <span class="hljs-title" style="box-sizing: border-box; color: rgb(102, 0, 102);">Intent</span> <span class="hljs-title" style="box-sizing: border-box; color: rgb(102, 0, 102);">contentSelectionIntent</span> = <span class="hljs-title" style="box-sizing: border-box; color: rgb(102, 0, 102);">new</span> <span class="hljs-title" style="box-sizing: border-box; color: rgb(102, 0, 102);">Intent</span><span class="hljs-params" style="color: rgb(102, 0, 102); box-sizing: border-box;">(Intent.ACTION_GET_CONTENT)</span>;
        <span class="hljs-title" style="box-sizing: border-box; color: rgb(102, 0, 102);">contentSelectionIntent</span>.<span class="hljs-title" style="box-sizing: border-box; color: rgb(102, 0, 102);">addCategory</span><span class="hljs-params" style="color: rgb(102, 0, 102); box-sizing: border-box;">(Intent.CATEGORY_OPENABLE)</span>;
        <span class="hljs-title" style="box-sizing: border-box; color: rgb(102, 0, 102);">contentSelectionIntent</span>.<span class="hljs-title" style="box-sizing: border-box; color: rgb(102, 0, 102);">setType</span><span class="hljs-params" style="color: rgb(102, 0, 102); box-sizing: border-box;">(<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"image/*"</span>)</span>;

        <span class="hljs-title" style="box-sizing: border-box; color: rgb(102, 0, 102);">Intent</span> <span class="hljs-title" style="box-sizing: border-box; color: rgb(102, 0, 102);">chooserIntent</span> = <span class="hljs-title" style="box-sizing: border-box; color: rgb(102, 0, 102);">new</span> <span class="hljs-title" style="box-sizing: border-box; color: rgb(102, 0, 102);">Intent</span><span class="hljs-params" style="color: rgb(102, 0, 102); box-sizing: border-box;">(Intent.ACTION_CHOOSER)</span>;
        <span class="hljs-title" style="box-sizing: border-box; color: rgb(102, 0, 102);">chooserIntent</span>.<span class="hljs-title" style="box-sizing: border-box; color: rgb(102, 0, 102);">putExtra</span><span class="hljs-params" style="color: rgb(102, 0, 102); box-sizing: border-box;">(Intent.EXTRA_INTENT, contentSelectionIntent)</span>;
        <span class="hljs-title" style="box-sizing: border-box; color: rgb(102, 0, 102);">chooserIntent</span>.<span class="hljs-title" style="box-sizing: border-box; color: rgb(102, 0, 102);">putExtra</span><span class="hljs-params" style="color: rgb(102, 0, 102); box-sizing: border-box;">(Intent.EXTRA_TITLE, <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"Image Chooser"</span>)</span>;

        <span class="hljs-title" style="box-sizing: border-box; color: rgb(102, 0, 102);">startActivityForResult</span><span class="hljs-params" style="color: rgb(102, 0, 102); box-sizing: border-box;">(chooserIntent, FILECHOOSER_RESULTCODE_FOR_ANDROID_5)</span>;
    }

    @<span class="hljs-title" style="box-sizing: border-box; color: rgb(102, 0, 102);">Override</span>
    <span class="hljs-title" style="box-sizing: border-box; color: rgb(102, 0, 102);">protected</span> <span class="hljs-title" style="box-sizing: border-box; color: rgb(102, 0, 102);">void</span> <span class="hljs-title" style="box-sizing: border-box; color: rgb(102, 0, 102);">initTopTitle</span><span class="hljs-params" style="color: rgb(102, 0, 102); box-sizing: border-box;">()</span> {
        <span class="hljs-title" style="box-sizing: border-box; color: rgb(102, 0, 102);">view</span>.<span class="hljs-title" style="box-sizing: border-box; color: rgb(102, 0, 102);">setVisibility</span><span class="hljs-params" style="color: rgb(102, 0, 102); box-sizing: border-box;">(View.GONE)</span>;
    }

    @<span class="hljs-title" style="box-sizing: border-box; color: rgb(102, 0, 102);">Override</span>
    <span class="hljs-title" style="box-sizing: border-box; color: rgb(102, 0, 102);">public</span> <span class="hljs-title" style="box-sizing: border-box; color: rgb(102, 0, 102);">boolean</span> <span class="hljs-title" style="box-sizing: border-box; color: rgb(102, 0, 102);">onKeyDown</span><span class="hljs-params" style="color: rgb(102, 0, 102); box-sizing: border-box;">(int keyCode, KeyEvent event)</span> {
        <span class="hljs-title" style="box-sizing: border-box; color: rgb(102, 0, 102);">if</span> <span class="hljs-params" style="color: rgb(102, 0, 102); box-sizing: border-box;">(webView.canGoBack<span class="hljs-params" style="box-sizing: border-box;">()</span> && event.getKeyCode<span class="hljs-params" style="box-sizing: border-box;">()</span> == KeyEvent.KEYCODE_BACK)</span> {
            //獲取歷史列表
            <span class="hljs-title" style="box-sizing: border-box; color: rgb(102, 0, 102);">WebBackForwardList</span> <span class="hljs-title" style="box-sizing: border-box; color: rgb(102, 0, 102);">mWebBackForwardList</span> = <span class="hljs-title" style="box-sizing: border-box; color: rgb(102, 0, 102);">webView</span>
                    .<span class="hljs-title" style="box-sizing: border-box; color: rgb(102, 0, 102);">copyBackForwardList</span><span class="hljs-params" style="color: rgb(102, 0, 102); box-sizing: border-box;">()</span>;
            //判斷當前歷史列表是否最頂端,其實<span class="hljs-title" style="box-sizing: border-box; color: rgb(102, 0, 102);">canGoBack</span>已經判斷過
            <span class="hljs-title" style="box-sizing: border-box; color: rgb(102, 0, 102);">if</span> <span class="hljs-params" style="color: rgb(102, 0, 102); box-sizing: border-box;">(mWebBackForwardList.getCurrentIndex<span class="hljs-params" style="box-sizing: border-box;">()</span> > <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0</span>)</span> {
                <span class="hljs-title" style="box-sizing: border-box; color: rgb(102, 0, 102);">webView</span>.<span class="hljs-title" style="box-sizing: border-box; color: rgb(102, 0, 102);">goBack</span><span class="hljs-params" style="color: rgb(102, 0, 102); box-sizing: border-box;">()</span>;
                <span class="hljs-title" style="box-sizing: border-box; color: rgb(102, 0, 102);">return</span> <span class="hljs-title" style="box-sizing: border-box; color: rgb(102, 0, 102);">true</span>;
            }
        }
        <span class="hljs-title" style="box-sizing: border-box; color: rgb(102, 0, 102);">return</span> <span class="hljs-title" style="box-sizing: border-box; color: rgb(102, 0, 102);">super</span>.<span class="hljs-title" style="box-sizing: border-box; color: rgb(102, 0, 102);">onKeyDown</span><span class="hljs-params" style="color: rgb(102, 0, 102); box-sizing: border-box;">(keyCode, event)</span>;
    }

    @<span class="hljs-title" style="box-sizing: border-box; color: rgb(102, 0, 102);">Override</span>
    <span class="hljs-title" style="box-sizing: border-box; color: rgb(102, 0, 102);">protected</span> <span class="hljs-title" style="box-sizing: border-box; color: rgb(102, 0, 102);">void</span> <span class="hljs-title" style="box-sizing: border-box; color: rgb(102, 0, 102);">onActivityResult</span><span class="hljs-params" style="color: rgb(102, 0, 102); box-sizing: border-box;">(int requestCode, int resultCode,Intent intent)</span> {
        <span class="hljs-title" style="box-sizing: border-box; color: rgb(102, 0, 102);">if</span> <span class="hljs-params" style="color: rgb(102, 0, 102); box-sizing: border-box;">(requestCode == FILECHOOSER_RESULTCODE)</span> {
            <span class="hljs-title" style="box-sizing: border-box; color: rgb(102, 0, 102);">if</span> <span class="hljs-params" style="color: rgb(102, 0, 102); box-sizing: border-box;">(null == mUploadMessage)</span>
                <span class="hljs-title" style="box-sizing: border-box; color: rgb(102, 0, 102);">return</span>;
            <span class="hljs-title" style="box-sizing: border-box; color: rgb(102, 0, 102);">Uri</span> <span class="hljs-title" style="box-sizing: border-box; color: rgb(102, 0, 102);">result</span> = <span class="hljs-title" style="box-sizing: border-box; color: rgb(102, 0, 102);">intent</span> == <span class="hljs-title" style="box-sizing: border-box; color: rgb(102, 0, 102);">null</span> || <span class="hljs-title" style="box-sizing: border-box; color: rgb(102, 0, 102);">resultCode</span> != <span class="hljs-title" style="box-sizing: border-box; color: rgb(102, 0, 102);">RESULT_OK</span> ? <span class="hljs-title" style="box-sizing: border-box; color: rgb(102, 0, 102);">null</span>:</span> intent.getData();
            mUploadMessage.onReceiveValue(result);
            mUploadMessage = null;

        } <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">else</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span> (requestCode == FILECHOOSER_RESULTCODE_FOR_ANDROID_5){
            <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span> (null == mUploadMessageForAndroid5)
                <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">return</span>;
            Uri result = (intent == null || resultCode != RESULT_OK) ? null: intent.getData();
            <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span> (result != null) {
                mUploadMessageForAndroid5.onReceiveValue(new Uri[]{result});
            } <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">else</span> {
                mUploadMessageForAndroid5.onReceiveValue(new Uri[]{});
            }
            mUploadMessageForAndroid5 = null;
        }
    }

    private Handler handler = new Handler() {
        public void handleMessage(Message msg) {// 定義一個Handler,用於處理下載線程與UI間通訊
            <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span> (!Thread.currentThread().isInterrupted()){
                switch (msg.what) {
                    case <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0</span>:
                        progressBar.show();// 顯示進度對話框
                        <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">break</span>;
                    case <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">1</span>:
                        progressBar.hide();// 隱藏進度對話框,不可使用dismiss()、cancel(),否則再次調用show()時,顯示的對話框小圓圈不會動。
                        <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">break</span>;
                }
            }

            super.handleMessage(msg);
        }
    };

}</code>
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章