Android中如何利用WebView上传文件
Android中如何利用WebView上传文件
今天小编给大家分享一下Android中如何利用WebView上传文件的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。
1.接收WebView打开文件选择器的通知
2.收到通知后,打开文件选择器等待用户选择需要上传的文件
3.在onActivityResult中得到用户选择的文件的Uri
4.然后把Uri传递给Html5
这样就完成了一次H5选择文件的过程,下面我把代码贴出来自习看一下
首先,WebView必须要支持JS交互,所以要打开JS交互
mWebView.getSettings().setJavaScriptEnabled(true);
当H5在调用上传文件的Api的时候,WebView会回调 openFileChooser和onShowFileChooser 方法来通知我们,我们这个时候要做的就是重写这个方法
需要注意的是这个方法在不同的Api上会回调不同行参方法
mWebView.setWebChromeClient(newWebChromeClient(){@OverridepublicvoidonProgressChanged(WebViewview,intnewProgress){if(newProgress==100){mBar.setVisibility(View.GONE);}else{mBar.setVisibility(View.VISIBLE);mBar.setProgress(newProgress);}super.onProgressChanged(view,newProgress);}//ForAndroidAPI<11(3.0OS)publicvoidopenFileChooser(ValueCallback<Uri>valueCallback){uploadMessage=valueCallback;openImageChooserActivity();}//ForAndroidAPI>=11(3.0OS)publicvoidopenFileChooser(ValueCallback<Uri>valueCallback,StringacceptType,Stringcapture){uploadMessage=valueCallback;openImageChooserActivity();}//ForAndroidAPI>=21(5.0OS)@OverridepublicbooleanonShowFileChooser(WebViewwebView,ValueCallback<Uri[]>filePathCallback,WebChromeClient.FileChooserParamsfileChooserParams){uploadMessageAboveL=filePathCallback;openImageChooserActivity();returntrue;}});
我们在openFileChooser方法中先保存了一下ValueCallback的回调对象,这个对象最后用来通知H5文件地址,我们之后在调用openFileChooser方法来打开文件选择器
privatevoidopenImageChooserActivity(){Intenti=newIntent(Intent.ACTION_GET_CONTENT);i.addCategory(Intent.CATEGORY_OPENABLE);i.setType("image/*");startActivityForResult(Intent.createChooser(i,"ImageChooser"),FILE_CHOOSER_RESULT_CODE);}
当用户选择完文件后,会调用onActivityResult方法,我们重写并等待回调
@OverrideprotectedvoidonActivityResult(intrequestCode,intresultCode,Intentdata){super.onActivityResult(requestCode,resultCode,data);if(requestCode==FILE_CHOOSER_RESULT_CODE){if(null==uploadMessage&&null==uploadMessageAboveL)return;Uriresult=data==null||resultCode!=RESULT_OK?null:data.getData();if(uploadMessageAboveL!=null){onActivityResultAboveL(requestCode,resultCode,data);}elseif(uploadMessage!=null){uploadMessage.onReceiveValue(result);uploadMessage=null;}}}@TargetApi(Build.VERSION_CODES.LOLLIPOP)privatevoidonActivityResultAboveL(intrequestCode,intresultCode,Intentintent){if(requestCode!=FILE_CHOOSER_RESULT_CODE||uploadMessageAboveL==null)return;Uri[]results=null;if(resultCode==Activity.RESULT_OK){if(intent!=null){StringdataString=intent.getDataString();ClipDataclipData=intent.getClipData();if(clipData!=null){results=newUri[clipData.getItemCount()];for(inti=0;i<clipData.getItemCount();i++){ClipData.Itemitem=clipData.getItemAt(i);results[i]=item.getUri();}}if(dataString!=null)results=newUri[]{Uri.parse(dataString)};}}uploadMessageAboveL.onReceiveValue(results);uploadMessageAboveL=null;}
以上就是“Android中如何利用WebView上传文件”这篇文章的所有内容,感谢各位的阅读!相信大家阅读完这篇文章都有很大的收获,小编每天都会为大家更新不同的知识,如果还想学习更多的知识,请关注恰卡编程网行业资讯频道。
推荐阅读
-
android(如何快速开发框架 小米note开发版MIUI,安卓6.0,怎么安装Xposed框架)
稳定版,你必须先根除。你上网搜索安卓可以叫别人s框架,对方可以把框架做成jar包,把这个jar包加载到项目目录的libs文件中使...
-
android(studio 虚拟机启动不了 android studio可以当模拟器用吗)
androidstudio可以当模拟器用吗?AmdCUP引导模拟器有点复杂。雷电模拟器上的抖音怎么登录不上?不是,闪电模拟调用...
-
从实践中学习手机抓包与数据分析(android 手机抓包app)
android手机抓包app?netcapture抓包精灵app(手机抓包工具)又名sslcapture,是什么专业的安卓手机抓...
-
android(studio全局搜索 android studio怎么看app界面)
androidstudio怎么看app界面?在设备桌面点击运用直接进入到App界面,就也可以参与其他你的操作了。android-...
-
怎么把android框架源代码拉到本地(android studio如何运行别人的源代码)
androidstudio如何运行别人的源代码?androidstudio点击刚建在列表中你选择导入module,导入即可在用...
-
android(studio2022年使用教程 怎么安装Android studio详细教程)
怎么安装Androidstudio详细教程?androidstudio中haxm直接安装的方法追加:1、简单的方法打开Andr...
-
怎么使用Android基准配置文件Baseline Profile方案提升启动速度
-
HTML5如何实现禁止android视频另存为
-
学java好还是学php好?
-
Android如何实现多点触控功能