最近做了需要实现一个小功能,在安卓的离线数据录入程序中,要支持文件的的上传。简单而言,就是在一个webview包装起来的离线的Web

App中,通过input[type=file]的指定需要上传的文件,然后点击保存按钮的时候将数据先保存到本地(因为是离线状态),然后当网络连通的时候再将数据和文件一起上传到服务器。由于程序主要操作界面是一个类似于phonegap封装的纯JS的Web

APP,所以基本上限定了文件的选择获取只能通过input[type=file]来。并且由于一般安卓的手机或者平台都是支持相机的,所以我手欠的加了一个便捷的功能:点击input[type=file]时直接从相机照相然后保存数据的功能。这就是这一趟受罪的开始。

一般来说,实现这种功能,都是在webview的WebChromeClient中覆盖掉openFileChooser方法,打开文件选择,网上一般流传的都市从安卓系统的浏览器源代码里抄出来的这一套:

public void

openFileChooser(ValueCallback uploadMsg) {

openFileChooser(uploadMsg,

"**");

Intent chooser =

createChooserIntent(createCameraIntent());

chooser.putExtra(Intent.EXTRA_INTENT,

i);

((Activity)

ctx).startActivityForResult(chooser, 5173);

}

public ValueCallback

getValueCallback() {

return

this.mUploadMessage;

}

private Intent

createChooserIntent(Intent... intents) {

Intent chooser = new

Intent(Intent.ACTION_CHOOSER);

chooser.putExtra(Intent.EXTRA_INITIAL_INTENTS,

intents);

chooser.putExtra(Intent.EXTRA_TITLE,

ctx.getString(R.string.FileBrowser));

return chooser;

}

private Intent

createCameraIntent() {

Intent cameraIntent = new

Intent(MediaStore.ACTION_IMAGE_CAPTURE);

cameraIntent.putExtra(MediaStore.EXTRA_OUTPUT,

Uri.fromFile(new File(imageFilePath)));

return cameraIntent;

}

除此之外就是在Activity的onActivityResult的方法中判断如果是从相机来就直接从图像路径取图而不是从Intent里取数据。

但是很不幸的是,这套代码在安卓2.2/2.3上是不能实现从相机照相然后传到input[type=file]上的,file控件总是显示空白。各种奇异的情况总是让人莫名的很抓狂。

由于功能要的紧,我头一个晚上弄的晚上4点都没找到解决的办法。这个似乎就是webview的限制。于是第二天一早起来接着看,就连stackoverflow上都一帮人说没办法解决,我差点就直接放弃了。静下心来一想,为什么直接从图片库中选择的图片能够在file控件中正确的显示而就只文件的不行呢?难道就是因为WebView不支持file://格式的Uri而仅仅只支持content格式的Uri?

于是我傻乎的又去把android的java部分的源代码弄下来,可问题是居然部分的实现都是native的代码,在系统自带的浏览器里是把uri和文件路径的映射存在了BrowserFrame的一个hashmap里,似乎在Java这一层和Webview的file控件的联系就这么直接的断了。

于是又换一个方向,既然webView不支持file://格式的Uri,那我为何不将file://格式的Uri转换成content://格式的Uri呢?于是又是一番搜索,两行代码就搞定了这个事情:

String media

=MediaStore.Images.Media.insertImage(getContentResolver(),filepath,"","");

result = Uri.parse(media);

mUploadMessage.onReceiveValue(result);

总之,在人类这个世界上写程序,面对很多莫名其妙的问题时,如果变通一下一小部分的问题还是能解决的。希望下次我碰到的还是这种能解决的小疑难。呵呵呵。

android webview拍照,在android 2.2/2.3中使用webview从camera中照相并且上传的实现相关推荐

  1. Android添加拍照功能,Android相机开发(二): 给相机加上偏好设置

    Android Camera Develop: add settings to camera app 概述 继上一篇实现了一个最简单的相机APP后,本篇主要介绍实现相机的各种偏好设置,比如分辨率.闪光 ...

  2. Android添加拍照功能,Android开发实现拍照功能的方法实例解析

    本文实例讲述了Android开发实现拍照功能的方法.分享给大家供大家参考,具体如下: 解析: 1)判断是否有摄像头checkCameraHardware(this) 2)获得相机camera = Ca ...

  3. android 静默拍照功能,Android实现静默拍照功能

    本文实例为大家分享了Android实现静默拍照功能的具体代码,供大家参考,具体内容如下 1.申请权限(6.0以后要动态申请) 2.创建相机工具类 CameraPreview: public class ...

  4. android摄像头拍照代码,Android调用摄像头拍照开发教程

    现在很多应用中都会要求用户上传一张图片来作为头像,首先我在这接收使用相机拍照和在相册中选择图片.接下来先上效果图: 接下来看代码: 1.布局文件: xmlns:tools="http://s ...

  5. android相机拍照代码,Android 调用相机拍照,适配到Android 10

    今天写的博客是关于Android调用手机相机拍照并显示图片.这是一个很常用的功能,并且这个功能在Android6.0.7.0.10.0等版本上实现都有所不同,需要对Android各个版本进行兼容适配, ...

  6. Android模拟器中sd卡的创建和文件的上传

    在使用android 模拟器的sd卡上传文件的时候出现过如下的错误: ailed to push selection: Invalidargument Failed to push the item( ...

  7. android模拟器拍照图,android模拟器无法使用camera拍照

    遇到的问题: 1 在模拟器里,无法启动camera: 2 成功启动camera之后,真正拍照的时候,提示"your sdcard is full",我明明有一个100M的sdcar ...

  8. android 自定义拍照模糊,Android自定义相机拍照模糊处理

    问题分析:随着用户对于拍照清晰度的需求,android手机对于摄像头也是一升再升,这就导致了作为android开发工程师对于兼容性维护的继续跟进以及问题处理. 针对于自定义相机拍照模糊的问题,经过几天 ...

  9. Android添加拍照功能,Android自定义相机,添加水印

    很多app都要求自定义一个相机,类似违章查询拍照,美图相机之类的应用都要求自定义相机,网上的例子大多数我也看过,很多例子是有坑的,存在各种各样的问题,常见的就是问题就是适配性很差,这里我分享一下我做的 ...

最新文章

  1. 压测接口线程数设置_ZAT掌门性能压测巡检系统实战和落地
  2. 与uefi_UEFI + GPT 启动 VHD
  3. 线程类中如何调用service_你真的了解Java多线程吗?
  4. 码农干货系列【17】--Wind.js与Promise.js
  5. WPF-21:WPF实现仿安卓的图案密码键盘(初级)
  6. 浅谈分布式计算的开发与实现(二)
  7. Springboot知识库系统答辩PPT模板
  8. 知识扩展——轻量级和重量级框架的区别
  9. 使用pumysql 查询数据插入另外一张表
  10. 中文界面blend_使用Blend设计出符合效果的WPF界面
  11. png能转换成html吗,png转化成pdf
  12. python语言在ansys的应用_Python语言在ANSYS的应用52讲-掌握SCDM脚本建模及ANSYS二次开发能力...
  13. 学妹要的20道Redis面试题,在这也分享一下(转载自程序羊羊哥)
  14. 7-6 jmu-python-随机生成密码 (10 分)习题解答
  15. html文档在word打开是乱码怎么解决,word打开是乱码的解决方法
  16. 五年谷歌ML Infra生涯,我学到最重要的3个教训
  17. C++学习(三九二)-fPIC, -fpic, -fpie, -fPIE
  18. 令人吐血的女大学生平安信.
  19. 创业遇到困难怎么解决,解决困难是创业成功的关键
  20. 数字标牌行业嵌入式主板方案

热门文章

  1. Markdown简明教程
  2. 打印Show Atend and Tell编码器的优化器
  3. git 分支复制_Git基础知识(五)
  4. 云服务器端口对外开放详解
  5. SpringMVC-拦截器快速入门
  6. The Digits String
  7. matlab raw函数,用matlab处理Raw格式的图像文件的方法
  8. java biginteger位数,Java之BigInteger(面试题12:打印1到最大的n位数)
  9. mysql5.0锁定用户_MySQL系列(五)---总结MySQL中的锁
  10. 羊车门问题python_羊车门问题(示例代码)