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>