android webview 多文件上传,让Android中的webview支持页面中的文件上传

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

如果在网页中有,在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 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支持文件上传。。。

让Android的WebView支持html里面的文件上传

默认情况下,Android的webview是不支持的,点击没有任何反应,如果希望点击上传,弹出选择文件.图片的窗口,那就需要自定义一个WebChromeC ...

SharePoint 2010 ——自定义上传页面与多文件上传解决方案

最近项目遇到一个很麻烦的问题,原以为很容易解决,结果搞了那么久,先开个头,再慢慢写 SharePoint 2010 ——自定义上传页面与多文件上传解决方案 1.创建Sharepoint空白项目,创建应 ...

PHP中的一个很好用的文件上传类

Crontab中shell每分钟执行一次HDFS文件上传不执行的解决方案

一.Crontab -e 加入输出Log */1 * * * * /qiwen_list/upload_to_hdfs.sh > /qiwen_list/mapred.log 2>& ...

django项目中form表单和ajax的文件上传功能。

form表单文件上传 路由 # from表单上传 path('formupload/',apply.formupload,name='formupload/'), 方法 # form表单文件上传 de ...

Struts2中文件上传下载实例

1.单文件上传 jsp页面:

随机推荐

python学习之路 第六天

1.正则表达式 re.match() 从头匹配: re.match("[0-9]","123abc789") 只匹配一个数字: re.match("[ ...

c# key event

使用C#写ui时,希望能够读取到键盘输入的事件,用于快捷键或者其他操作.本文记录操作创建key event的方法. 参考链接: http://csharp.net-informations.com/g ...

dsu + lca

贴一下使用dsu和lca的代码,dsu的代码很简单,可以马上写出来,但是lca的代码就不熟练了.这里lca的计算还是用了dfs的访问时间标记,我想起来割边, 割点的判断, dfu[u], low[u] ...

charset

这是html5的写法.

分布式版本控制系统Git-----4.Git 常用命令整理

1. git init 初始化 git 目录 2. git add 添加文件 git add fileName       #添加指定文件 git add -i             #手工选择要添 ...

LWIP裸机环境下实现TCP与UDP通讯

前面移植了LWIP,并且简单的实用了DHCP的功能,今天来使用一下实际的数据通讯的功能 首先是实现TCP客户端,我先上代码 #ifndef __TCP_CLIENT_H_ #define __TCP_ ...

☆ [WC2006] 水管局长 「LCT动态维护最小生成树」

题目类型:\(LCT\)动态维护最小生成树 传送门:>Here< 题意:给出一张简单无向图,要求找到两点间的一条路径,使其最长边最小.同时有删边操作 解题思路 两点间路径的最长边最小,也就 ...

POJ1821 单调队列//ST表 优化dp

http://poj.org/problem?id=1821 当我们在考虑内层循环j以及决策k的时候,我们可以把外层变量i看作定值,以此来优化dp状态转移方程. 题意 有n个工人准备铺m个连续的墙,每 ...

线段树模板hdu 1754:I Hate It

I Hate It Time Limit: 9000/3000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total S ...

你可能感兴趣的:(android,webview,多文件上传)