Android与H5相机、相册笔记

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

    咱们用WebView加载H5页面,须要使用WebView上传文件。默认状况下状况下,使用Android的WebView是不可以支持上传文件的。这时,须要webView设置WebChromeClient,重写一些方法,以下:前端


介绍一下上面的方法:java

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

onShowFileChooser:Android 5.0以后,系统提供了来让咱们实现选择文件的方法。 参数: FileChooserParams:在该参数中,一样包括acceptType。咱们能够根据acceptType,来打开系统的或者咱们本身建立文件选择器。

注意:android

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

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

H5前端调用时的代码:web

<input capture="camera" class="upload-input" type="file" accept="image/*" οnchange="angular.element(this).scope().img_upload(this.files)"/>


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



真机测试是OK 的。app

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

借鉴以下:

http://teachcourse.cn/2224.html