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

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

Android与H5相机、相册笔记_第1张图片

介绍一下上面的方法:

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前端调用时的代码:


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

Android与H5相机、相册笔记_第2张图片


真机测试是OK 的。

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

借鉴如下:

http://teachcourse.cn/2224.html

更多相关文章

  1. android工程下运行main方法的配置方法
  2. Android Studio无法新建创建android工程解决方法
  3. Android Studio设置主题 和 不支持中文的问题解决方法
  4. Flutter下载更新App的方法示例
  5. Android SO文件的兼容和适配
  6. android map的使用方法
  7. 解决在3.6.2安装android的ADT文件bug
  8. Android Span的各种使用方法,简单、易懂、全面、详细

随机推荐

  1. Android(安卓)M新控件之AppBarLayout,Navi
  2. Dalvik
  3. Android(安卓)中文API (37) ―― AbsoluteL
  4. 将x264移植到Android
  5. Android(安卓)Lifecycle
  6. Android(安卓)跳转基础应用(联系人,日历)
  7. Android使用AlertDialog的信息列表单选、
  8. Android(安卓)4.1 动态加载APK中的资源
  9. Android进行短信备份的一个工具类,支持进
  10. android ContentResolver的使用(获取和修