- 浏览: 236507 次
- 性别:
- 来自: 成都
文章分类
- 全部博客 (70)
- Spring (5)
- J2EE (5)
- Android (21)
- JavaSe (12)
- JmagicK (1)
- Eclipse (3)
- 重构 (1)
- Struts2 (2)
- 项目经验 (2)
- UML (1)
- 设计模式 (3)
- TDD (1)
- 极限编程 (1)
- 敏捷编程 (1)
- Json (1)
- Java web (1)
- ejb (1)
- mongodb (1)
- Mylyn (1)
- git (1)
- oracle (2)
- 操作系统 (1)
- 数据结构与算法 (2)
- C (1)
- 效率参考 (1)
- Java基础 (3)
- 开源框架 (1)
- 阿里云 (2)
- linux (1)
- html5开发框架 (3)
- ios开发 (2)
- webapp (0)
- 我的创业 (1)
- Java (1)
- IDE (1)
- Java虚拟机 (2)
- 区块链 (2)
最新评论
-
BlueSkyXin:
你真的很厉害,懂得不懂得,都跟我们讲清楚了。你这才叫学知识,透 ...
Struts2值栈的理解 -
wiseyl:
第一种方法: 过滤器不太好,建议在service层时 由于se ...
hibernate+spring mvc,解决hibernate对象懒加载,json序列化失败 -
u012256814:
您好,看了您的这个教程受益不小,我就是想问问您在sha1后面加 ...
Google Map API V2 密钥申请 详细图解 -
ahau10:
OGNL表达式,context, valueStack都讲清楚 ...
Struts2值栈的理解 -
yaolan:
Struts2值栈的理解
废话不多说,直接进入主题,想要在android中实现拍照最简单饿方法就是New 一个 Intent 设置Action为android.media.action.IMAGE_CAPTURE 然后使用startActivityForResult(intent,REQUEST_CODE)方法进入相机。当然还有很多方式可以实现,大家可以在网上查找。但是要注意的是在进入相机前最好判断下sdcard是否可用,代码如下:
destoryBimap(); String state = Environment.getExternalStorageState(); if (state.equals(Environment.MEDIA_MOUNTED)) { intent = new Intent("android.media.action.IMAGE_CAPTURE"); startActivityForResult(intent, REQUEST_CODE); } else { Toast.makeText(DefectManagerActivity.this, R.string.common_msg_nosdcard, Toast.LENGTH_LONG).show(); }
当拍照完成以后需要在onActivityResult(int requestCode, int resultCode, Intent data)方法中获取拍摄的图片,android把拍摄的图片封装到bundle中传递回来,但是根据不同的机器获得相片的方式不太一样,所以会出现某一种方式获取图片为null的想象,解决办法就是做一个判断,当一种方式不能获取,就是用另一种方式,下面是分别获取相片的两种方式:
Uri uri = data.getData(); if (uri != null) { photo = BitmapFactory.decodeFile(uri.getPath()); } if (photo == null) { Bundle bundle = data.getExtras(); if (bundle != null) { photo = (Bitmap) bundle.get("data"); } else { Toast.makeText(DefectManagerActivity.this, getString(R.string.common_msg_get_photo_failure), Toast.LENGTH_LONG).show(); return; } }
第一种方式是用方法中传回来的intent调用getData();方法获取数据的Uri,然后再根据uri获取数据的路径,然后根据路径封装成一个bitmap就行了.
第二种方式也是用法中传回来的intent对象但是不再是调用getData();方法而是调用getExtras();方法获取intent里面所有参数的一个对象集合bundle,然后是用bundle对象得到键为data的值也就是一个bitmap对象.
通过上面两种方式就能获取相片的bitmap对象,然后就可以在程序中是用,如果你想把相片保存到自己指定的目录可以是用如下步骤即可:
首先bitmap有个一compress(Bitmap.CompressFormat.JPEG, 100, baos)方法,这个方法有三个参数,第一个是指定将要保存的图片的格式,第二个是图片保存的质量,值是0-100,比如像PNG格式的图片这个参数你可以随便设置,因为PNG是无损的格式。第三个参数是你一个缓冲输出流ByteArrayOutputStream();,这个方法的作用就是把bitmap的图片转换成jpge的格式放入输出流中,然后大家应该明白怎么操作了吧,下面是实例代码:
String pictureDir = ""; FileOutputStream fos = null; BufferedOutputStream bos = null; ByteArrayOutputStream baos = null; try { baos = new ByteArrayOutputStream(); bitmap.compress(Bitmap.CompressFormat.JPEG, 100, baos); byte[] byteArray = baos.toByteArray(); String saveDir = Environment.getExternalStorageDirectory() + "/temple"; File dir = new File(saveDir); if (!dir.exists()) { dir.mkdir(); } File file = new File(saveDir, "temp.jpg"); file.delete(); if (!file.exists()) { file.createNewFile(); } fos = new FileOutputStream(file); bos = new BufferedOutputStream(fos); bos.write(byteArray); pictureDir = file.getPath(); } catch (Exception e) { e.printStackTrace(); } finally { if (baos != null) { try { baos.close(); } catch (Exception e) { e.printStackTrace(); } } if (bos != null) { try { bos.close(); } catch (Exception e) { e.printStackTrace(); } } if (fos != null) { try { fos.close(); } catch (Exception e) { e.printStackTrace(); } } }
然后就是实现图片的上传功能,我这里是是用的apache的HttpClient里面的MultipartEntity实现文件上传具体代码如下:
/** * 提交参数里有文件的数据 * * @param url * 服务器地址 * @param param * 参数 * @return 服务器返回结果 * @throws Exception */ public static String uploadSubmit(String url, Map<String, String> param, File file) throws Exception { HttpPost post = new HttpPost(url); MultipartEntity entity = new MultipartEntity(); if (param != null && !param.isEmpty()) { for (Map.Entry<String, String> entry : param.entrySet()) { entity.addPart(entry.getKey(), new StringBody(entry.getValue())); } } // 添加文件参数 if (file != null && file.exists()) { entity.addPart("file", new FileBody(file)); } post.setEntity(entity); HttpResponse response = httpClient.execute(post); int stateCode = response.getStatusLine().getStatusCode(); StringBuffer sb = new StringBuffer(); if (stateCode == HttpStatus.SC_OK) { HttpEntity result = response.getEntity(); if (result != null) { InputStream is = result.getContent(); BufferedReader br = new BufferedReader( new InputStreamReader(is)); String tempLine; while ((tempLine = br.readLine()) != null) { sb.append(tempLine); } } } post.abort(); return sb.toString(); }
这里就基本上对图片上传就差不多了,但是还有一个问题就是图片上传完以后bitmap还在内存中,而且大家都知道如果,高清的图片比较大,而手机内存本来就有限,如果不进行处理很容易报内存溢出,所以我们应该把处理完的bitmap从内存中释放掉,这时候就需要调用bitmap的recycle();方法,调用这个方法的时候需要注意不能太早也不能太晚,不然会报异常,一般可以放在下一张图片生成前或者没有任何view引用要销毁的图片的时候下面是实例代码:
/** * 销毁图片文件 */ private void destoryBimap() { if (photo != null && !photo.isRecycled()) { photo.recycle(); photo = null; } }
发表评论
-
Java实现文件加密传输和快速解密读取
2018-06-29 15:29 4299在运营某些项目时,我们可能需要使用到第三方的服务器来存储数据 ... -
Java实现文件加密传输和快速解密读取
2018-06-29 15:37 1在运营某些项目时,我们可能需要使用到第三方的服务器来存储数 ... -
Android4.4来了
2013-11-01 13:59 0Beautiful & Immersive A ... -
Android应用开机自动启动
2013-09-28 19:58 1759背景知识:当Android启动时,会发出一个系统广播,内容为 ... -
Java基础 之软引用、弱引用、虚引用
2013-09-28 19:55 1122在JDK1.2以前的版本中,当一个对象不被任何变 ... -
adb server无法启动方法,结束占用端口的进程
2013-08-05 13:38 8340adb server is out of date. ki ... -
ListViewPager,ListView分页最轻量解决方案
2013-08-05 12:41 0import java.util.concurrent.at ... -
【Android】升级ADT 22 引发的错误
2013-07-05 17:24 1044言 今天心血来潮,又把ADT升级了一下,升级到了ADT 2 ... -
Google I/O大会发布Android Studio,安装与不能运行解决
2013-05-16 15:25 20811.下载地址: https://developer.an ... -
Google I/O大会发布Android Studio,安装与不能运行解决等错误解决。
2013-05-16 15:23 1280下载地址: https://developer.andro ... -
使用Git之后出现android library引用失败
2013-04-06 00:04 5515今天在做android项目的使用,因为使用了git做代码托管 ... -
提高Android在eclipse下的编译速度
2013-04-02 15:46 3170大家都知道用eclipse安装adt来进行Android程序 ... -
android no target available 解决
2013-04-02 15:33 10422在安装最新版本的ADT之后,版本21.1.启动eclipse ... -
android学习和广告平台赚钱
2013-01-30 09:29 1704前言: 2011年11月份我开始学习andr ... -
android4.0 使用百度地图不能自动刷新问题
2013-01-21 10:38 2074百度地图,4.0以下的可以正常使用。 但是4.0的就会出 ... -
Google Map API V2 密钥申请 详细图解
2013-01-13 11:03 19515前一阵公司给配了个Mac 谁想项目运行后地图没了,怎么办 ... -
Json转换为Java对象
2012-11-04 19:56 1705package com.chinatech.common ... -
Android Query使用教程
2012-08-05 01:39 7625在android程序设计中,很多是要要实现异步任务,缓存,获取 ... -
设置Activity全屏
2012-08-05 01:27 1344*全屏 在Android下如何实现一个Activit ... -
Android资源
2012-07-14 13:10 1322Android Platform 3.0 SDK和 ...
相关推荐
android 拍照上传照片(新)源码,需要的可以下载下去看看。
本文将详细解析如何实现这样一个功能,并基于给出的“android拍照上传代码”进行讨论。 首先,Android拍照功能主要依赖于`Intent`系统服务。在Android中,可以启动相机应用来捕获图片,通过创建一个`Intent`对象并...
通过以上步骤,我们可以实现一个完整的Android应用,它可以调用相机拍照,将图片保存到本地,然后通过HTTPServlet上传到PC端服务器。在实际项目中,还可能需要考虑错误处理、进度显示、多图上传等复杂情况。理解并...
调用Android系统自带拍照功能对发票进行拍照存储; 使用DES算法加密照片; 基于Socket的上传发票照片及相关信息至服务器并解密; 将发票基本信息存至SqlServer数据库
在Android平台上,拍照上传功能是移动应用开发中的常见需求,特别是在社交、分享和记录类的应用中。本教程将深入探讨如何实现这一功能,包括拍照、图片剪切以及上传的详细步骤,非常适合Android开发的新手。 首先,...
3. **拍照上传**:除了从相册选择图片,用户还应能直接通过相机拍摄新照片上传。我们可以启动相机应用,通过ACTION_IMAGE_CAPTURE Intent捕获用户的拍照结果。拍照完成后,系统会返回一张临时的JPEG图片,我们需要将...
在Android平台上,开发一款应用程序允许用户使用内置摄像头拍照并上传照片至PHP服务器是一个常见的需求。这个过程涉及到Android的多媒体API、文件操作以及网络通信技术。下面将详细解释这些知识点。 1. **Android...
以上就是“android拍照后将照片上传服务器的例子”所涉及的主要技术点,实现这样一个功能需要理解Android的相机API、文件操作、网络请求以及权限管理等多个方面的知识。通过这个例子,开发者可以更好地掌握Android...
在Android应用开发中,将用户通过手机...以上就是Android端拍照上传至服务器的基本流程和关键知识点,具体实现会根据所选技术和个人风格有所不同。如果你对代码有任何疑问或有改进的想法,可以通过邮件与作者交流。
在Android平台上,实现拍照上传图片的功能是移动应用开发中常见的需求。这个过程涉及到多个关键步骤,包括请求相机权限、启动相机、处理返回的图像数据、裁剪或压缩图片(如果需要)、以及上传到服务器。以下将详细...
在Android平台上,拍照上传功能是移动应用中常见的需求,它涉及到多媒体处理、网络通信以及用户交互等多个技术领域。本文将详细解析"android 拍照上传源码"中涉及的关键知识点,帮助开发者深入理解这一过程。 一、...
Android拍照上传** 拍照上传是指用户通过应用启动相机拍照后,直接上传照片到服务器。其主要流程如下: - **权限申请**:除了读取外部存储权限,还需要申请相机权限: ```xml <uses-permission android:name=...
综上所述,实现Android拍照上传图片功能需要涵盖权限管理、相机启动、图片捕获、裁剪处理、网络上传等多个技术环节,并注重用户体验和兼容性。每个环节都有其特定的挑战和解决方案,理解并熟练掌握这些知识点是构建...
这个"Android图片拍照上传Demo.zip"很可能是包含了一个完整的示例项目,帮助开发者理解和实现这一功能。现在,我们将深入探讨相关的知识点。 首先,Android提供了多种方式来获取图片,包括: 1. **相机 Intent**:...
以上就是一个基本的Android拍照和上传图片的实现流程。需要注意的是,由于Android版本的差异,部分API可能需要兼容处理。同时,确保在使用相机和访问外部存储时,获取了相应的权限。在Android 6.0及以上版本,还需要...
总结起来,实现“Android拍照并上传服务器代码”主要涉及以下几个步骤:启动相机、处理返回的图片、数据加密、与服务器的HTTP通信。每个步骤都有相应的Android API和编程技术支持,理解并掌握这些知识点是Android...
本示例主要讲解如何实现"Android拍照上传和拍照本地显示,拍照剪切上传,选取本地图片剪切上传"的功能,这对于社交、电商、生活类应用尤其关键。下面我们将深入探讨这个主题。 首先,我们来了解Android中的相机API...
以下是一些核心知识点,涵盖了Android拍照上传的完整流程: 1. **请求相机权限**:在Android 6.0(API级别23)及以上版本,应用需要在运行时请求权限,包括`Manifest.permission.CAMERA`和`Manifest.permission....
在Android应用开发中,涉及到多媒体数据的处理,如拍照、录像和本地文件上传,往往是一项复杂的任务。这个项目集成了拍照、录像以及本地文件上传功能,并提供了客户端和服务端的完整解决方案。下面将详细阐述其中...
针对标题和描述中提到的问题,我们将详细探讨如何进行Android 7.0的拍照权限适配,以便实现本地图片选择、拍照以及上传头像到后台的功能。 1. **运行时权限介绍** Android 6.0(API级别23)及更高版本中,用户不再...