Webview打开本地图片选择器

本文提供了一种在不同Android版本上实现Webview调用本地图片选择器的通用方案,解决了开发者在Android 3.x、4.x及5.x版本中遇到的兼容性问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值