公司项目中android内嵌H5页面,H5页面需要选择上传图片功能。H5的标签无法调起android照相机和图库功能,所以只能android进行处理。本人第一次做,借鉴网上诸多的代码,总结如下:

    我们用WebView加载H5页面,需要使用WebView上传文件。默认情况下情况下,使用Android的WebView是不能够支持上传文件的。这时,需要webView设置WebChromeClient,重写一些方法,如下:


介绍一下上面的方法:

openFileChooser():系统未暴露的接口,因此不需要加Override的注解,同时不同版本有不同的参数.参数:ValueCallback: 选择完文件后,接收文件回调到网页内处理acceptType:接受的文件mime type。

onShowFileChooser:Android 5.0之后,系统提供了来让我们实现选择文件的方法。参数:FileChooserParams:在该参数中,同样包括acceptType。我们可以根据acceptType,来打开系统的或者我们自己创建文件选择器。

注意:

  1. 由于不同版本的差别,Android 5.0以下的版本,ValueCallback 的onReceiveValue接收的参数类型是Uri, 5.0及以上版本接收的是Uri数组,在传值的时候需要注意。
  2. 即使获取的结果为null,也要传给webview,即直接调用mUploadMessage.onReceiveValue(null),否则网页会阻塞。 
  3. 选择文件会使用系统提供的组件或者其他支持的app,返回的uri有的直接是文件的url,有的是contentprovider的uri,因此我们需要统一处理一下,转成文件的uri

  4. 在打release包的时候,因为我们会混淆,要特别设置不要混淆WebChromeClient子类里面的openFileChooser方法,由于不是继承的方法,所以默认会被混淆,然后就无法选择文件了。

H5前端调用时的代码:


效果图:(模拟器运行效果)



真机测试是OK 的。

Demo下载地址:https://github.com/xufei5789651/UploadH5Demo

借鉴如下:

http://teachcourse.cn/2224.html

更多相关文章

  1. android的selector,背景选择器
  2. Android(安卓)Studio使用教程、工程目录结构、使用注意事项、常
  3. 【Android学习之旅】1、Android入门介绍
  4. Android——用户登陆及用户名和密码的保存
  5. android AIDL服务
  6. Android导出一个JAR库/Android如何将程序打成jar包/android 打包
  7. Android之Adapter用法总结
  8. Android之MediaStore应用
  9. Android应用程序的签名

随机推荐

  1. Android自定义导览地图组件(一)
  2. Android获取手机设备信息并区分真机与模
  3. 「Android」 APK瘦身探索
  4. Android透明式状态栏、导航栏实现
  5. Android学习笔记(4)---模拟手机拨号器
  6. 关于Android的组件名
  7. Android使用 LruCache 缓存图片
  8. 避免内存泄漏
  9. Android中@+id和@id的区别
  10. 使用Android模拟器测试Linux驱动(1)