Android 照相及上传

转自:http://helloandroid.iteye.com/blog/1183437

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. }
时间: 2024-11-05 06:15:39

Android 照相及上传的相关文章

android post方式上传文件(模拟表单格式数据提交)

表单提交内容为: POST /upload.php?zp_id=ab46ca6d703e3a1580c1c9b8b3a8fb39 HTTP/1.1Accept: image/gif, image/jpeg, image/pjpeg, image/pjpeg, application/x-ms-application, application/x-ms-xbap, application/vnd.ms-xpsdocument, application/xaml+xml, application/v

Android HTTP POST上传

HTTP POST上传通用方法,支持文字.图片.文件等. 依赖jar包下载地址:http://hc.apache.org/downloads.cgi 下载HttpClient ***   Binary. 将HttpComponents libraries中的httpmime-4.3.3.jar拷贝到Android工程的libs下即可. //填充上传实体对象MultipartEntity entity = new MultipartEntity(HttpMultipartMode.BROWSER_

android C#webservice 上传文件

android 端 public String UploadHeadImg(Bitmap bitmap,String fileName ) { String[] arg={"BtyeString","FileName"}; String[] val={bitmaptoString(bitmap),fileName}; return bd.GetWebReturnModel("UploadFile", arg, val); } public Str

Android将Library上传到jcenter超简单完整步骤以及遇到的各种坑

Android将Library上传到jcenter超简单完整步骤以及遇到的各种坑 在[玩转SQLite系列](七)打造轻量级ORM工具类SQLiteDbUtil操作数据库 中我们可以看到这个工具类的超简洁用法:只需要在gradle中引入: compile 'cn.bluemobi.dylan:sqlitelibrary:0.1' 即可使用,那么这到底是怎么回事?这个是Android项目所在jcenter的一个远程仓库.我们只需要将你的libray上传到jcenter即可,那么如和将一个项目上传到

android图片压缩上传系列-service篇

本篇文章是继续上篇android图片压缩上传系列-基础篇文章的续篇.主要目的是:通过Service来执行图片压缩任务来讨论如何使用Service,如何处理任务量大的并发问题. 了解下Service 大家都知道如果有费时任务,这时需要将任务放到后台线程中执行,如果对操作的结果需要通过ui展示还需要在任务完成后通知前台更新.当然对于这种情况,大家也可以在Activity中启动线程,在线程中通过Handler和sendMessage来通知Activity并执行更新ui的操作,但是更好的方法是将这些操作

Android图片文件上传实例

原文:Android图片文件上传实例 源代码下载地址:http://www.zuidaima.com/share/1550463718132736.htm 支持拍照图片上传和从手机相册中获取图片上传到服务器端的功能 源码截图

android批量文件上传(android批量图片上传)

项目中多处用到文件批量上传功能,今天正好解决了此问题,在此写出来,以便日后借鉴. 首先,以下架构下的批量文件上传可能会失败或者不会成功: 1.android客户端+springMVC服务端:服务端采用org.springframework.web.multipart.MultipartHttpServletRequest作为批量上传接收类,这种搭配下的批量文件上传会失败,最终服务端只会接受到一个文件,即只会接受到第一个文件.可能因为MultipartHttpServletRequest对serv

基于Http原理实现Android的图片上传和表单提交

版权声明:本文由张坤  原创文章,转载请注明出处: 文章原文链接:https://www.qcloud.com/community/article/794875001483009140 来源:腾云阁 https://www.qcloud.com/community 现在服务器主要是Web居多,客户端一般通过http上传文件到web服务器,最开始的设想很简单,直接将图片转化为字节流,写入到http的outstream,随后发送出去即可. 但当这种方法出现问题,服务器根据文件名这个表单中的字段来判定

android:AndroidAnnotations上传文件,网络接口如此简洁

网络接口如此简洁 使用HttpClient进行文件的上传,可以参考博客:使用HttpClient进行文件上传 如果项目使用AndroidAnnotation,写上传接口就会非常方便,比如之前写POST接口 首先参考之前的博客,使用AndroidAnnotations进行POST请求. 如下是使用AndroidAnnotations进行文件上传的网络接口 @Rest(rootUrl = "http://192.168.31.183:8080/SSHMySql/", converters