关键代码如下:
private ValueCallback<Uri> mUploadMessage;
private ValueCallback<Uri[]> mUploadCallbackAboveL;
privatefinalstaticintFILECHOOSER_RESULTCODE = 1;
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == FILECHOOSER_RESULTCODE) {
if (null == mUploadMessage && null == mUploadCallbackAboveL)
return;
Uri result = data == null || resultCode != RESULT_OK ? null : data.getData();
if (mUploadCallbackAboveL != null) {
onActivityResultAboveL(requestCode, resultCode, data);
} else if (mUploadMessage != null) {
mUploadMessage.onReceiveValue(result);
mUploadMessage.onReceiveValue(result);
mUploadMessage = null;
}
}
}
@TargetApi(Build.VERSION_CODES.LOLLIPOP)
private void onActivityResultAboveL(int requestCode, int resultCode, Intent data) {
if (requestCode != FILECHOOSER_RESULTCODE || mUploadCallbackAboveL == null) {
return;
}
Uri[] results = null;
if (resultCode == Activity.RESULT_OK) {
if (data == null) {
} else {
String dataString = data.getDataString();
ClipData clipData = data.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)};
}
}
mUploadCallbackAboveL.onReceiveValue(results);
mUploadCallbackAboveL = null;
return;
}
为webview 设置WebChromeClient
mWebView.setWebChromeClient(new WebChromeClient() {
// For Android 3.0+
public void openFileChooser(ValueCallback<Uri> uploadMsg) {
mUploadMessage = uploadMsg;
Intent i = new Intent(Intent.ACTION_GET_CONTENT);
i.addCategory(Intent.CATEGORY_OPENABLE);
i.setType("*/*");
AdWebActivity.this.startActivityForResult(Intent.createChooser(i, "File Chooser"),
FILECHOOSER_RESULTCODE);
}
// For Android 3.0+
public void openFileChooser(ValueCallback uploadMsg, String acceptType) {
mUploadMessage = uploadMsg;
Intent i = new Intent(Intent.ACTION_GET_CONTENT);
i.addCategory(Intent.CATEGORY_OPENABLE);
i.setType("*/*");
AdWebActivity.this.startActivityForResult(Intent.createChooser(i, "File Browser"),
FILECHOOSER_RESULTCODE);
}
// For Android 4.1
public void openFileChooser(ValueCallback<Uri> uploadMsg, String acceptType, String capture) {
mUploadMessage = uploadMsg;
Intent i = new Intent(Intent.ACTION_GET_CONTENT);
i.addCategory(Intent.CATEGORY_OPENABLE);
i.setType("*/*");
AdWebActivity.this.startActivityForResult(Intent.createChooser(i, "File Browser"),
AdWebActivity.FILECHOOSER_RESULTCODE);
}
// For Android 5.0+
public boolean onShowFileChooser(WebView webView, ValueCallback<Uri[]> filePathCallback,
WebChromeClient.FileChooserParams fileChooserParams) {
mUploadCallbackAboveL = filePathCallback;
Intent i = new Intent(Intent.ACTION_GET_CONTENT);
i.addCategory(Intent.CATEGORY_OPENABLE);
i.setType("*/*");
AdWebActivity.this.startActivityForResult(Intent.createChooser(i, "File Browser"),
FILECHOOSER_RESULTCODE);
return true;
}
});
相关推荐
解决在webview中input标签type="file"不能使用的问题
注意:input[type=file] 标签中的属性accept=application/msword,application/pdf 在pc上正常,但是在手机ios和android上这个文件格式限制会被忽略,所以需要在js中增加格式的判断,以及对应显示样式的设置.(我也是刚...
发现点击H5中 input type=”file” 标签 不能打开android资源管理器。 通过网络搜索发现是因为 android webview 由于考虑安全原因屏蔽了 input type=”file” 这个功能 。 经过不懈的努力,以及google 翻译的帮助 在...
支持input标签文件上传 支持Js通信文件上传 简化回退及返回键的处理 简化url加载 webview 安全漏洞的问题修复,更加安全 支持权限管理,常用的定位、相册的权限 支持电话、短信、邮件的跳转 支持自定义进度条指示器 ...
为什么在input标签类型为file上传文件时在标签中设置属性 accpet="image/*",打开本地文件夹的速度特别慢? 经过测试发现,在mac里面safari、Firefox、Chrome(opera不知道为啥老闪退)都没有卡顿问题 在windows里面,...
a.3 上传*.apk程序到android market上 812 附录b 升级项目至新版sdk 与honeycomb平板程序部署 815 b.1 android sdk版本与项目最低运行版本设置 816 b.2 升级程序至honeycomb平板运行 816
基本信息 Google Android SDK开发范例大全...A.3 上传*.apk程序到Android Market上 附录B 升级项目至新版SDK 与Honeycomb平板程序部署 B.1 Android SDK版本与项目最低运行版本设置 B.2 升级程序至Honeycomb平板运行
基本信息 Google Android SDK开发范例大全...A.3 上传*.apk程序到Android Market上 附录B 升级项目至新版SDK 与Honeycomb平板程序部署 B.1 Android SDK版本与项目最低运行版本设置 B.2 升级程序至Honeycomb平板运行
基本信息 Google Android SDK开发范例大全...A.3 上传*.apk程序到Android Market上 附录B 升级项目至新版SDK 与Honeycomb平板程序部署 B.1 Android SDK版本与项目最低运行版本设置 B.2 升级程序至Honeycomb平板运行
基本信息 Google Android SDK开发范例大全...A.3 上传*.apk程序到Android Market上 附录B 升级项目至新版SDK 与Honeycomb平板程序部署 B.1 Android SDK版本与项目最低运行版本设置 B.2 升级程序至Honeycomb平板运行
由于源文件大小为99.3MB,所以采用... A.3 上传*.apk程序到Android Market上 附录B 升级项目至新版SDK 与Honeycomb平板程序部署 B.1 Android SDK版本与项目最低运行版本设置 B.2 升级程序至Honeycomb平板运行
WebViewFileUploadFix Android WebView 文件上传修复(Agate JavaScript 插件) 截屏 :它能做什么 ? 使用 Agate JavaScript Plugin 修复了 <input type="file"> 在 Android 4.4.2 上不工作的问题。 它不需要...
功能是android webview 嵌入HTML5的页面,页面中有一个标签,iOS直接就支持,但android中不支持,网上的帖子说是因为android屏蔽了文件上传功能还是怎么的,没看明白,但是重写WebViewClient,WebChromeClient这两个...
mobileUpLoadImage移动端图片上传并处理目前我所知道的移动端上传图片的方式大致有几种:直接上传图片(由于移动端照出来...这两种方式操作起来其实都很方便首先你需要在页面上创建一个input标签,<input type="file
注意这个状态并不能标识 Android 系统已经完全启动和可操作,在设备启动过程中设备实例就可连接到 adb,但启动完毕后系统才处于可操作状态。 no device —— 没有设备/模拟器连接。 以上输出显示当前已经连接了...