Java代码

  1. package com.android.cist.camera.view;
  2. import java.io.ByteArrayOutputStream;
  3. import java.io.InputStream;
  4. import java.util.HashMap;
  5. import java.util.Map;
  6. import android.app.Activity;
  7. import android.app.AlertDialog;
  8. import android.content.ContentResolver;
  9. import android.content.DialogInterface;
  10. import android.content.Intent;
  11. import android.graphics.Bitmap;
  12. import android.graphics.BitmapFactory;
  13. import android.net.Uri;
  14. import android.os.Bundle;
  15. import android.os.Handler;
  16. import android.os.Message;
  17. import android.view.View;
  18. import android.view.View.OnClickListener;
  19. import android.widget.Button;
  20. import android.widget.EditText;
  21. import android.widget.ImageView;
  22. import android.widget.LinearLayout;
  23. import android.widget.Toast;
  24. import com.android.cist.R;
  25. import com.android.cist.network.HttpUtil;
  26. import com.android.cist.network.form.FormFile;
  27. import com.android.cist.network.form.HttpFormUtil;
  28. import com.android.cist.util.ApplicationUtil;
  29. import com.android.cist.util.ImageUtil;
  30. public class CameraActivity extends Activity implements OnClickListener{
  31. private ImageView preview;
  32. private EditText carNo;
  33. private EditText addres;
  34. private EditText type;
  35. private Button back;
  36. private Button submit;
  37. private Button capture;
  38. private Button reCapture;
  39. private OnClickListener imgViewListener;
  40. private Bitmap myBitmap;
  41. private byte[] mContent;
  42. private Handler handler;
  43. String returnString;
  44. private CalendarView happenDate;
  45. private static final int REQUEST_CAMERA = 1;
  46. private static final int REQUEST_CALENDAR = 2;
  47. @ Override
  48. public void onCreate ( Bundle savedInstanceState )
  49. {
  50. super.onCreate(savedInstanceState);
  51. setContentView(R.layout.camera);
  52. setUpViews();
  53. setUpListeners();
  54. ApplicationUtil.getInstance().addActivity(this);
  55. }
  56. @ Override
  57. protected void onActivityResult ( int requestCode , int resultCode , Intent data )
  58. {
  59. super.onActivityResult(requestCode, resultCode, data);
  60. ContentResolver resolver = getContentResolver();
  61. /**
  62. * 因为两种方式都用到了startActivityForResult方法,
  63. * 这个方法执行完后都会执行onActivityResult方法, 所以为了区别到底选择了那个方式获取图片要进行判断,
  64. * 这里的requestCode跟startActivityForResult里面第二个参数对应
  65. */
  66. if (requestCode == 0)
  67. {
  68. try
  69. {
  70. // 获得图片的uri
  71. Uri originalUri = data.getData();
  72. // 将图片内容解析成字节数组
  73. mContent = readStream(resolver.openInputStream(Uri.parse(originalUri.toString())));
  74. // 将字节数组转换为ImageView可调用的Bitmap对象
  75. myBitmap = getPicFromBytes(mContent, null);
  76. // //把得到的图片绑定在控件上显示
  77. preview.setImageBitmap(myBitmap);
  78. } catch ( Exception e )
  79. {
  80. System.out.println(e.getMessage());
  81. }
  82. } else if (requestCode == REQUEST_CAMERA){
  83. try
  84. {
  85. super.onActivityResult(requestCode, resultCode, data);
  86. Bundle extras = data.getExtras();
  87. myBitmap = (Bitmap) extras.get("data");
  88. ByteArrayOutputStream baos = new ByteArrayOutputStream();
  89. myBitmap.compress(Bitmap.CompressFormat.JPEG, 100, baos);
  90. mContent = baos.toByteArray();
  91. } catch ( Exception e )
  92. {
  93. e.printStackTrace();
  94. }
  95. // 把得到的图片绑定在控件上显示
  96. preview.setImageBitmap(ImageUtil.toRoundCorner(myBitmap, 10));//把拍摄的照片转成圆角显示在预览控件上
  97. }else if(requestCode==REQUEST_CALENDAR){
  98. if(resultCode == RESULT_OK){
  99. happenDate.setCalendar(data.getIntExtra("year", 1900),
    data.getIntExtra("month", 0), data.getIntExtra("day", 1));
  100. }
  101. }
  102. }
  103. public static Bitmap getPicFromBytes ( byte[] bytes , BitmapFactory.Options opts )
  104. {
  105. if (bytes != null)
  106. if (opts != null)
  107. return BitmapFactory.decodeByteArray(bytes, 0, bytes.length, opts);
  108. else
  109. return BitmapFactory.decodeByteArray(bytes, 0, bytes.length);
  110. return null;
  111. }
  112. public static byte[] readStream ( InputStream inStream ) throws Exception
  113. {
  114. byte[] buffer = new byte[1024];
  115. int len = -1;
  116. ByteArrayOutputStream outStream = new ByteArrayOutputStream();
  117. while ((len = inStream.read(buffer)) != -1)
  118. {
  119. outStream.write(buffer, 0, len);
  120. }
  121. byte[] data = outStream.toByteArray();
  122. outStream.close();
  123. inStream.close();
  124. return data;
  125. }
  126. @Override
  127. public void onClick(View v) {
  128. int id = v.getId();
  129. switch(id){
  130. case R.id.capture:{
  131. final CharSequence[] items =
  132. { "相册", "拍照" };
  133. AlertDialog dlg = new AlertDialog.Builder(CameraActivity.this).setTitle("选择图片").setItems(items,
  134. new DialogInterface.OnClickListener()
  135. {
  136. public void onClick ( DialogInterface dialog , int item )
  137. {
  138. // 这里item是根据选择的方式,
  139. // 在items数组里面定义了两种方式,拍照的下标为1所以就调用拍照方法
  140. if (item == 1){
  141. Intent getImageByCamera = new
    Intent("android.media.action.IMAGE_CAPTURE");
  142. startActivityForResult(getImageByCamera, REQUEST_CAMERA);
  143. } else{
  144. Intent getImage = new Intent(Intent.ACTION_GET_CONTENT);
  145. getImage.addCategory(Intent.CATEGORY_OPENABLE);
  146. getImage.setType("image/jpeg");
  147. startActivityForResult(getImage, 0);
  148. }
  149. }
  150. }).create();
  151. dlg.show();
  152. }
  153. break;
  154. /*case R.id.reCapture:{
  155. final CharSequence[] items =
  156. { "相册", "拍照" };
  157. AlertDialog dlg = new AlertDialog.Builder(CameraActivity.this).setTitle("选择图片").setItems(items,
  158. new DialogInterface.OnClickListener()
  159. {
  160. public void onClick ( DialogInterface dialog , int item )
  161. {
  162. // 这里item是根据选择的方式,
  163. // 在items数组里面定义了两种方式,拍照的下标为1所以就调用拍照方法
  164. if (item == 1)
  165. {
  166. Intent getImageByCamera = new
    Intent("android.media.action.IMAGE_CAPTURE");
  167. startActivityForResult(getImageByCamera, 1);
  168. } else
  169. {
  170. Intent getImage = new Intent(Intent.ACTION_GET_CONTENT);
  171. getImage.addCategory(Intent.CATEGORY_OPENABLE);
  172. getImage.setType("image/jpeg");
  173. startActivityForResult(getImage, 0);
  174. }
  175. }
  176. }).create();
  177. dlg.show();
  178. }
  179. break;*/
  180. case R.id.submit:{
  181. new PostThread().start();//开启线程提交数据
  182. }
  183. break;
  184. case R.id.back:{
  185. CameraActivity.this.finish();//返回,销毁当前Activity
  186. }
  187. break;
  188. default:
  189. break;
  190. }
  191. }
  192. }

android照相及照片上传的更多相关文章

  1. Android实现批量照片上传至server,拍照或者从相冊选择

    近期因为项目需求,须要完毕批量照片上传,折腾了一段时间,最终完毕了,达到了例如以下效果 主界面主要有GridView组成和button组成,当按下一个格点时,会调用相机或者相冊,拍照或者选择相冊照片, ...

  2. 用C#缩小照片上传到各种空间

    中秋到了,首先祝各位猿友节日快乐!!! 本博文的原名称是“跟我一起用C#压缩照片上传到各种空间”,评论上有人开骂,没办法我这人就是自信霸气,但是既然有人提出来我还是改掉吧,如果文章写得不好的地方欢迎大 ...

  3. Android之mtk上传log

    Android之mtk上传log 1,打开浏览器 2.输入地址http://eservice.mediatek.com/eservice-portal/login 3.输入用户名,密码 4.提eser ...

  4. 使用.NET框架、Web service实现Android的文件上传(二)

    aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAYUAAAKpCAIAAADcx6fPAAAgAElEQVR4nOydd1hT5+LHg1attbfr1t ...

  5. 利用WCF与Android实现图片上传并传参

    利用WCF与Android实现图片上传并传参 最近做一个项目后端使用WCF接收Android手机拍照并带其它参数保存到服务器里:刚好把最近学习的WCF利用上,本以为是个比较简单的功能应该很好实现,没想 ...

  6. Android OkHttp文件上传与下载的进度监听扩展

    http://www.loongwind.com/archives/290.html 上一篇文章介绍了用Retrofit实现文件的上传与下载,但是我们发现没办法监听上传下载的进度,毕竟我们在做开发的时 ...

  7. SSM + Android 网络文件上传下载

    SSM + Android 网络交互的那些事 2016年12月14日 17:58:36 ssm做为后台与android交互,相信只要是了解过的人都知道一些基本的数据交互,向json,对象,map的交互 ...

  8. Android自定义View前传-View的三大流程-Measure

    Android自定义View前传-View的三大流程-Measure 参考 <Android开发艺术探索> https://developer.android.google.cn/refe ...

  9. css实现照片上传的加号框

    css实现照片上传的加号框    

随机推荐

  1. MVC5+Easyui1.3.6+EF6 开发部分备忘笔记

    一点一点增加,后面继续. 1.Row Editing in DataGrid 编辑,总是绑定不了checkbox的问题

  2. 010-centos上安装matlab

    #001-下载matlab_R2015b和破解文件(四个)到百度云盘上下载7.6g#002-上传matlab大文件先安装vm tools,然后直接复制到虚拟机桌面#003-挂载matlab镜像并安装m ...

  3. Perl的debug小技巧

    进入Perl的调试环境的命令:  Perl  -d  perl_file 设置断点:b + perl代码中的行号. 执行到断点:c 表示continue until breakpoint. 执行下一条 ...

  4. 26最短路径之Floyd算法

    Floyd算法 思想:将n个顶点的图G“分成”很多子图 每对顶点vi和vj对应子图Gij(i=0,1,…,n-1和j=0,1,…,n-1) 每对顶点vi和vj都保留一条顶点限于子图Gij中的最短路径P ...

  5. Trove系列(五)—Trove的数据存储管理程序类型和版本管理功能介绍

    功能描述数据存储管理程序(Datastore)类型管理允许Trove的用户从操作者列出的名单中选择数据库存储管理程序和版本.操作者将可以控制数据库存储管理程序的类型,添加一个新的版本并去活一个老版本. ...

  6. ThinkPHP CURD mysql操作

    ThinkPHP CURD操作 ThinkPHP提供了灵活和方便的数据操作方法,对数据库操作的四个基本操作(CURD):创建.更新.读取和删除的实现是最基本的,也是必须掌握的,在这基础之上才能熟悉更多 ...

  7. 【读书笔记】SpringBoot读书笔记

    整体目录结构: 一.入门 二.开发第一个应用程序 三.自定义配置 四.测试 五.Groovy与Spring Boot Cli 六.在Spring Boot中使用Grails 七.深入Actuator ...

  8. Java系列笔记(0) - 目录和概述

    笔者在开发过程中发现自己基础太薄弱,读书时除了系统学习了一下Java的基础语法和用法.一点简单的数据结构和设计模式之外,再无深入系统的学习,而工作中的学习也是东晃一枪西晃一枪,不够扎实和系统.想到一个 ...

  9. poj 1274 The Prefect Stall - 二分匹配

    Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 22736   Accepted: 10144 Description Far ...

  10. python字符串、列表和文件对象总结

    1.字符串是字符序列.字符串文字可以用单引号或者双引号分隔. 2.可以用内置的序列操作来处理字符串和列表:连接(+).重复(*).索引([]),切片([:])和长度(len()).可以用for循环遍历 ...