android webview拍照,在android 2.2/2.3中使用webview从camera中照相并且上传的实现
最近做了需要实现一个小功能,在安卓的离线数据录入程序中,要支持文件的的上传。简单而言,就是在一个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中照相并且上传的实现相关推荐
- Android添加拍照功能,Android相机开发(二): 给相机加上偏好设置
Android Camera Develop: add settings to camera app 概述 继上一篇实现了一个最简单的相机APP后,本篇主要介绍实现相机的各种偏好设置,比如分辨率.闪光 ...
- Android添加拍照功能,Android开发实现拍照功能的方法实例解析
本文实例讲述了Android开发实现拍照功能的方法.分享给大家供大家参考,具体如下: 解析: 1)判断是否有摄像头checkCameraHardware(this) 2)获得相机camera = Ca ...
- android 静默拍照功能,Android实现静默拍照功能
本文实例为大家分享了Android实现静默拍照功能的具体代码,供大家参考,具体内容如下 1.申请权限(6.0以后要动态申请) 2.创建相机工具类 CameraPreview: public class ...
- android摄像头拍照代码,Android调用摄像头拍照开发教程
现在很多应用中都会要求用户上传一张图片来作为头像,首先我在这接收使用相机拍照和在相册中选择图片.接下来先上效果图: 接下来看代码: 1.布局文件: xmlns:tools="http://s ...
- android相机拍照代码,Android 调用相机拍照,适配到Android 10
今天写的博客是关于Android调用手机相机拍照并显示图片.这是一个很常用的功能,并且这个功能在Android6.0.7.0.10.0等版本上实现都有所不同,需要对Android各个版本进行兼容适配, ...
- Android模拟器中sd卡的创建和文件的上传
在使用android 模拟器的sd卡上传文件的时候出现过如下的错误: ailed to push selection: Invalidargument Failed to push the item( ...
- android模拟器拍照图,android模拟器无法使用camera拍照
遇到的问题: 1 在模拟器里,无法启动camera: 2 成功启动camera之后,真正拍照的时候,提示"your sdcard is full",我明明有一个100M的sdcar ...
- android 自定义拍照模糊,Android自定义相机拍照模糊处理
问题分析:随着用户对于拍照清晰度的需求,android手机对于摄像头也是一升再升,这就导致了作为android开发工程师对于兼容性维护的继续跟进以及问题处理. 针对于自定义相机拍照模糊的问题,经过几天 ...
- Android添加拍照功能,Android自定义相机,添加水印
很多app都要求自定义一个相机,类似违章查询拍照,美图相机之类的应用都要求自定义相机,网上的例子大多数我也看过,很多例子是有坑的,存在各种各样的问题,常见的就是问题就是适配性很差,这里我分享一下我做的 ...
最新文章
- 压测接口线程数设置_ZAT掌门性能压测巡检系统实战和落地
- 与uefi_UEFI + GPT 启动 VHD
- 线程类中如何调用service_你真的了解Java多线程吗?
- 码农干货系列【17】--Wind.js与Promise.js
- WPF-21:WPF实现仿安卓的图案密码键盘(初级)
- 浅谈分布式计算的开发与实现(二)
- Springboot知识库系统答辩PPT模板
- 知识扩展——轻量级和重量级框架的区别
- 使用pumysql 查询数据插入另外一张表
- 中文界面blend_使用Blend设计出符合效果的WPF界面
- png能转换成html吗,png转化成pdf
- python语言在ansys的应用_Python语言在ANSYS的应用52讲-掌握SCDM脚本建模及ANSYS二次开发能力...
- 学妹要的20道Redis面试题,在这也分享一下(转载自程序羊羊哥)
- 7-6 jmu-python-随机生成密码 (10 分)习题解答
- html文档在word打开是乱码怎么解决,word打开是乱码的解决方法
- 五年谷歌ML Infra生涯,我学到最重要的3个教训
- C++学习(三九二)-fPIC, -fpic, -fpie, -fPIE
- 令人吐血的女大学生平安信.
- 创业遇到困难怎么解决,解决困难是创业成功的关键
- 数字标牌行业嵌入式主板方案
热门文章
- Markdown简明教程
- 打印Show Atend and Tell编码器的优化器
- git 分支复制_Git基础知识(五)
- 云服务器端口对外开放详解
- SpringMVC-拦截器快速入门
- The Digits String
- matlab raw函数,用matlab处理Raw格式的图像文件的方法
- java biginteger位数,Java之BigInteger(面试题12:打印1到最大的n位数)
- mysql5.0锁定用户_MySQL系列(五)---总结MySQL中的锁
- 羊车门问题python_羊车门问题(示例代码)