博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
让Android中的webview支持页面中的文件上传
阅读量:6874 次
发布时间:2019-06-26

本文共 2294 字,大约阅读时间需要 7 分钟。

android webview在默认情况下是不支持网页中的文件上传功能的;

如果在网页中有<input type="file" />,在android webview中访问时也会出现浏览文件的按钮

但是点击按钮之后没有反应...

那么如何能够让android的webview能够响应,这个浏览按钮呢?

我们需要为webview设置WebChromeClient,在WebChromeClient的实现类中覆盖文件选择的方法:

 

/***************** android中使用WebView来打开本机的文件选择器 *************************/		// js上传文件的事件捕获		// Android > 4.1.1 调用这个方法		public void openFileChooser(ValueCallback
uploadMsg, String acceptType, String capture) { mUploadMessage = uploadMsg; Intent intent = new Intent(Intent.ACTION_GET_CONTENT); intent.addCategory(Intent.CATEGORY_OPENABLE); intent.setType("image/*"); context.startActivityForResult( Intent.createChooser(intent, "完成操作需要使用"), WebMainActivity.FILECHOOSER_RESULTCODE); } // 3.0 + 调用这个方法 public void openFileChooser(ValueCallback
uploadMsg, String acceptType) { mUploadMessage = uploadMsg; Intent intent = new Intent(Intent.ACTION_GET_CONTENT); intent.addCategory(Intent.CATEGORY_OPENABLE); intent.setType("image/*"); context.startActivityForResult( Intent.createChooser(intent, "完成操作需要使用"), WebMainActivity.FILECHOOSER_RESULTCODE); } // Android < 3.0 调用这个方法 public void openFileChooser(ValueCallback
uploadMsg) { mUploadMessage = uploadMsg; Intent intent = new Intent(Intent.ACTION_GET_CONTENT); intent.addCategory(Intent.CATEGORY_OPENABLE); intent.setType("image/*"); context.startActivityForResult( Intent.createChooser(intent, "完成操作需要使用"), WebMainActivity.FILECHOOSER_RESULTCODE); } /************** end ***************/

在设置WebChromeClient时,要传入一个ValueCallback<Uri> mUploadMessage,同时传入webview所在的Activity的对象;

 

在WebChromeClient的实现类中对应的文件选择事件响应的方法里,使用webview所在的activity对象开启一个android文件选择器,

使用startActivityForResult方法,在开启的文件选择activity结束后需要返回一个值;在webview所在的activity中通过覆盖Activity的onActivityResult方法,得到所需的结果,即选择文件的url

/**	 * 返回文件选择	 */	@Override	protected void onActivityResult(int requestCode, int resultCode,			Intent intent) {		if (requestCode == FILECHOOSER_RESULTCODE) {			mUploadMessage = wcci.getmUploadMessage();			if (null == mUploadMessage)				return;			Uri result = intent == null || resultCode != RESULT_OK ? null					: intent.getData();			mUploadMessage.onReceiveValue(result);			mUploadMessage = null;		}	}

完成上述操作后就成功的实现了android webview支持文件上传。。。

 

 

转载地址:http://bnofl.baihongyu.com/

你可能感兴趣的文章
CORS详解
查看>>
eclipse/myeclipse选中编辑区域文件,Package Explorer定位文件所在项目及文件夹
查看>>
Snail—OC学习之类别Category
查看>>
C#枚举的使用
查看>>
Java笔记2:Eclipse编写第一个Java程序
查看>>
【足迹C++primer】表达式求值
查看>>
javascript小白学习指南0---1
查看>>
8小时与8节课
查看>>
harbor1.4.0高可用部署
查看>>
C#实现接口xml序列化与反序列化
查看>>
[译]Godot系列教程一 - 场景与节点
查看>>
BUG级别定义标准
查看>>
Java常考面试题(经典)
查看>>
可能是迄今为止最好的GitHub代码浏览插件--赞
查看>>
ASP.NET Core 微服务初探[1]:服务发现之Consul
查看>>
HDU-1072 Nightmare BFS
查看>>
认清世界,认清自我,超凡脱俗
查看>>
在VC中向数据库提交SLQ语句
查看>>
如何在Fedora 22上面配置Apache的Docker容器
查看>>
Swift 控制流
查看>>