android照相及照片上传

 
 


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.        
  193. }

 

posted @ 2013-08-14 17:39  brave-sailor  阅读(346)  评论(0编辑  收藏  举报