Android使用WebView加载网页选择文件上传

发布时间:2026/7/28 16:07:51
Android使用WebView加载网页选择文件上传
文章目录效果如下:网页参考代码Android代码效果如下:使用Android WebView加载网页网页中调用文件选择功能实现网页参考代码!DOCTYPE htmlhtmlheadmetacharsetutf-8metanameviewportcontentwidthdevice-width,maximun-scale1,mininum-scale1,user-scale1tile文件选择/tilestyle.filechooser{width:95%;height:50px;-webkit-background-clip:border-box;}/stylescriptvardisplayfunction(){varpathdocument.getElementById(file_chooser).textContent;document.getElementById(filechooser_display).innerHTML(bpath/b);}/script/headbodyulclasslistviewliclasslistviewItemfieldsetclassitemsetinputclassfilechooseridfile_choosertypefileplaceholder选择文件onchangedisplay()oninputdisplay()brpidfilechooser_display/pdivclassline_black/div/fieldset/li/ul/body/htmlAndroid代码importandroid.content.Intent;importandroid.net.Uri;importandroid.os.Bundle;importandroid.util.Log;importandroid.webkit.ValueCallback;importandroid.webkit.WebChromeClient;importandroid.webkit.WebSettings;importandroid.webkit.WebView;importandroidx.annotation.Nullable;importandroidx.appcompat.app.AppCompatActivity;publicclassMainActivityextendsAppCompatActivity{privateWebView mWebView;privateValueCallbackUriuploadFile;privateValueCallbackUri[]uploadFiles;OverrideprotectedvoidonCreate(Bundle savedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);mWebViewfindViewById(R.id.webview);initWebView();mWebView.loadUrl(file:///android_asset/fileChooser.html);}privatevoidinitWebView(){WebSettings settingsmWebView.getSettings();settings.setJavaScriptEnabled(true);settings.setSupportZoom(false);settings.setBuiltInZoomControls(false);mWebView.setWebChromeClient(newWebChromeClient(){// For Android 3.0publicvoidopenFileChooser(ValueCallbackUriuploadMsg,String acceptType){Log.i(test,openFileChooser 1);MainActivity.this.uploadFileuploadMsg;openFileChooseProcess();}// For Android 3.0publicvoidopenFileChooser(ValueCallbackUriuploadMsgs){Log.i(test,openFileChooser 2);MainActivity.this.uploadFileuploadMsgs;openFileChooseProcess();}// For Android 4.1.1publicvoidopenFileChooser(ValueCallbackUriuploadMsg,String acceptType,String capture){Log.i(test,openFileChooser 3);MainActivity.this.uploadFileuploadMsg;openFileChooseProcess();}// For Android 5.0publicbooleanonShowFileChooser(WebView webView,ValueCallbackUri[]filePathCallback,WebChromeClient.FileChooserParams fileChooserParams){Log.i(test,openFileChooser 4:filePathCallback.toString());MainActivity.this.uploadFilesfilePathCallback;openFileChooseProcess();returntrue;}});}privatevoidopenFileChooseProcess(){Intent inewIntent(Intent.ACTION_GET_CONTENT);i.addCategory(Intent.CATEGORY_OPENABLE);i.setType(*/*);startActivityForResult(Intent.createChooser(i,上传文件),0);}OverrideprotectedvoidonResume(){super.onResume();mWebView.onResume();}OverrideprotectedvoidonPause(){super.onPause();mWebView.onPause();}OverrideprotectedvoidonActivityResult(intrequestCode,intresultCode,NullableIntent data){super.onActivityResult(requestCode,resultCode,data);if(requestCode0){if(resultCodeRESULT_OK){if(null!uploadFile){Uri resultdatanull?null:data.getData();uploadFile.onReceiveValue(result);uploadFilenull;}if(null!uploadFiles){Uri resultdatanull?null:data.getData();uploadFiles.onReceiveValue(newUri[]{result});uploadFilesnull;}}elseif(resultCodeRESULT_CANCELED){if(null!uploadFile){uploadFile.onReceiveValue(null);uploadFilenull;}}}}}核心代码是为WebView设置WebChromeClient实现openFileChooser方法mWebView.setWebChromeClient(newWebChromeClient(){// For Android 3.0publicvoidopenFileChooser(ValueCallbackUriuploadMsg,String acceptType){Log.i(test,openFileChooser 1);MainActivity.this.uploadFileuploadMsg;openFileChooseProcess();}// For Android 3.0publicvoidopenFileChooser(ValueCallbackUriuploadMsgs){Log.i(test,openFileChooser 2);MainActivity.this.uploadFileuploadMsgs;openFileChooseProcess();}// For Android 4.1.1publicvoidopenFileChooser(ValueCallbackUriuploadMsg,String acceptType,String capture){Log.i(test,openFileChooser 3);MainActivity.this.uploadFileuploadMsg;openFileChooseProcess();}// For Android 5.0publicbooleanonShowFileChooser(WebView webView,ValueCallbackUri[]filePathCallback,WebChromeClient.FileChooserParams fileChooserParams){Log.i(test,openFileChooser 4:filePathCallback.toString());MainActivity.this.uploadFilesfilePathCallback;openFileChooseProcess();returntrue;}});