Android 解决WebView无法上传文件的问题

Android原生的WebView并不支持上传文件,需要我们自己实现相应的方法。于是我把工作中的相关代码记录下来。下次直接拿来用就行了。一点一滴都是经验。
1。需要定义三个变量
private ValueCallback<Uri[]> uploadMessageAboveL; private final static int FILE_CHOOSER_RESULT_CODE = 10000; private ValueCallback<Uri> uploadMessage;
2.重写Activity相关方法
private void openImageChooserActivity() {
Intent i = new Intent(Intent.ACTION_GET_CONTENT);
i.addCategory(Intent.CATEGORY_OPENABLE);
i.setType("image/*");
startActivityForResult(Intent.createChooser(i, "Image Chooser"), FILE_CHOOSER_RESULT_CODE);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == FILE_CHOOSER_RESULT_CODE) {
if (null == uploadMessage && null == uploadMessageAboveL) return;
Uri result = data == null || resultCode != RESULT_OK ? null : data.getData();
if (uploadMessageAboveL != null) {
onActivityResultAboveL(requestCode, resultCode, data);
} else if (uploadMessage != null) {
uploadMessage.onReceiveValue(result);
uploadMessage = null;
}
}
}
@TargetApi(Build.VERSION_CODES.LOLLIPOP)
private void onActivityResultAboveL(int requestCode, int resultCode, Intent intent) {
if (requestCode != FILE_CHOOSER_RESULT_CODE || uploadMessageAboveL == null)
return;
Uri[] results = null;
if (resultCode == Activity.RESULT_OK) {
if (intent != null) {
String dataString = intent.getDataString();
ClipData clipData = intent.getClipData();
if (clipData != null) {
results = new Uri[clipData.getItemCount()];
for (int i = 0; i < clipData.getItemCount(); i++) {
ClipData.Item item = clipData.getItemAt(i);
results[i] = item.getUri();
}
}
if (dataString != null)
results = new Uri[]{Uri.parse(dataString)};
}
}
uploadMessageAboveL.onReceiveValue(results);
uploadMessageAboveL = null;
}
3.重写WebChromeClient中的相关方法
// For Android < 3.0
public void openFileChooser(ValueCallback<Uri> valueCallback) {
uploadMessage = valueCallback;
openImageChooserActivity();
}
// For Android >= 3.0
public void openFileChooser(ValueCallback valueCallback, String acceptType) {
uploadMessage = valueCallback;
openImageChooserActivity();
}
//For Android >= 4.1
public void openFileChooser(ValueCallback<Uri> valueCallback, String acceptType, String capture) {
uploadMessage = valueCallback;
openImageChooserActivity();
}
// For Android >= 5.0
@Override
public boolean onShowFileChooser(WebView webView, ValueCallback<Uri[]> filePathCallback, WebChromeClient.FileChooserParams fileChooserParams) {
uploadMessageAboveL = filePathCallback;
openImageChooserActivity();
return true;
}
感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!
# Android
# WebView
# 解决WebView无法上传文件
# webView上传文件
# Android中的webview支持页面中的文件上传实例代码
# Android WebView那些坑之上传文件示例
# Android WebView 上传文件支持全解析
# 浅谈关于Android WebView上传文件的解决方案
# 重写
# 上传文件
# 都是
# 我把
# 希望能
# 谢谢大家
# 来用
# 下次
# 就行了
# addCategory
# ACTION_GET_CONTENT
# setType
# CATEGORY_OPENABLE
# Intent
# Activity
# openImageChooserActivity
# void
# protected
# Override
# onActivityResult
相关文章:
广州网站设计制作一条龙,广州巨网网络科技有限公司是干什么的?
如何在Golang中引入测试模块_Golang测试包导入与使用实践
如何通过VPS建站无需域名直接访问?
如何用虚拟主机快速搭建网站?详细步骤解析
建站之星2.7模板快速切换与批量管理功能操作指南
c++怎么用jemalloc c++替换默认内存分配器【性能】
建站主机是什么?如何选择适合的建站主机?
相亲简历制作网站推荐大全,新相亲大会主持人小萍萍资料?
如何快速生成凡客建站的专业级图册?
html制作网站的步骤有哪些,iapp如何添加网页?
如何通过WDCP绑定主域名及创建子域名站点?
长沙做网站要多少钱,长沙国安网络怎么样?
清除minerd进程的简单方法
无锡营销型网站制作公司,无锡网选车牌流程?
网站制作专业公司有哪些,如何制作一个企业网站,建设网站的基本步骤有哪些?
建站之星如何修改网站生成路径?
建站中国官网:模板定制+SEO优化+建站流程一站式指南
测试制作网站有哪些,测试性取向的权威测试或者网站?
网站app免费制作软件,能免费看各大网站视频的手机app?
网站建设制作、微信公众号,公明人民医院怎么在网上预约?
Python lxml的etree和ElementTree有什么区别
IOS倒计时设置UIButton标题title的抖动问题
官网自助建站系统:SEO优化+多语言支持,快速搭建专业网站
Python多线程使用规范_线程安全解析【教程】
制作网站的模板软件,网站怎么建设?
如何选择建站程序?包含哪些必备功能与类型?
如何快速搭建个人网站并优化SEO?
免费视频制作网站,更新又快又好的免费电影网站?
Android自定义listview布局实现上拉加载下拉刷新功能
制作网站外包平台,自动化接单网站有哪些?
如何在阿里云购买域名并搭建网站?
javascript中的try catch异常捕获机制用法分析
Android自定义控件实现温度旋转按钮效果
深圳 网站制作,深圳招聘网站哪个比较好一点啊?
如何快速建站并高效导出源代码?
企业在线网站设计制作流程,想建设一个属于自己的企业网站,该如何去做?
,石家庄四十八中学官网?
广州网站建站公司选择指南:建站流程与SEO优化关键词解析
logo在线制作免费网站在线制作好吗,DW网页制作时,如何在网页标题前加上logo?
建站之星后台管理系统如何操作?
动图在线制作网站有哪些,滑动动图图集怎么做?
如何挑选优质建站一级代理提升网站排名?
如何通过云梦建站系统实现SEO快速优化?
在线ppt制作网站有哪些软件,如何把网页的内容做成ppt?
天津个人网站制作公司,天津网约车驾驶员从业资格证官网?
专业商城网站制作公司有哪些,pi商城官网是哪个?
台州网站建设制作公司,浙江手机无犯罪记录证明怎么开?
招商网站制作流程,网站招商广告语?
c# Task.Yield 的作用是什么 它和Task.Delay(1)有区别吗
导航网站建站方案与优化指南:一站式高效搭建技巧解析
*请认真填写需求信息,我们会在24小时内与您取得联系。