Android中如何利用WebView上传文件

Android中如何利用WebView上传文件

今天小编给大家分享一下Android中如何利用WebView上传文件的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。

1.接收WebView打开文件选择器的通知

Android中如何利用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上传文件”这篇文章的所有内容,感谢各位的阅读!相信大家阅读完这篇文章都有很大的收获,小编每天都会为大家更新不同的知识,如果还想学习更多的知识,请关注恰卡编程网行业资讯频道。

发布于 2022-04-15 22:29:45
收藏
分享
海报
0 条评论
40
上一篇:Android中如何消除屏幕锁 下一篇:Android中如何设置阴影效果
目录

    推荐阅读

    0 条评论

    本站已关闭游客评论,请登录或者注册后再评论吧~

    忘记密码?

    图形验证码