android照相及照片上传

来源:互联网 发布:四维彩超的数据看性别 编辑:程序博客网 时间:2024/05/07 16:49
package com.android.cist.camera.view;    import java.io.ByteArrayOutputStream;  import java.io.InputStream;  import java.util.HashMap;  import java.util.Map;    import android.app.Activity;  import android.app.AlertDialog;  import android.content.ContentResolver;  import android.content.DialogInterface;  import android.content.Intent;  import android.graphics.Bitmap;  import android.graphics.BitmapFactory;  import android.net.Uri;  import android.os.Bundle;  import android.os.Handler;  import android.os.Message;  import android.view.View;  import android.view.View.OnClickListener;  import android.widget.Button;  import android.widget.EditText;  import android.widget.ImageView;  import android.widget.LinearLayout;  import android.widget.Toast;    import com.android.cist.R;  import com.android.cist.network.HttpUtil;  import com.android.cist.network.form.FormFile;  import com.android.cist.network.form.HttpFormUtil;  import com.android.cist.util.ApplicationUtil;  import com.android.cist.util.ImageUtil;    public class CameraActivity extends Activity implements OnClickListener{      private ImageView preview;      private EditText carNo;      private EditText addres;      private EditText type;      private Button back;      private Button submit;      private Button capture;      private Button reCapture;      private OnClickListener imgViewListener;      private Bitmap myBitmap;      private byte[] mContent;      private Handler handler;      String returnString;      private CalendarView happenDate;      private static final int REQUEST_CAMERA = 1;      private static final int REQUEST_CALENDAR = 2;        @ Override      public void onCreate ( Bundle savedInstanceState )      {          super.onCreate(savedInstanceState);          setContentView(R.layout.camera);          setUpViews();          setUpListeners();          ApplicationUtil.getInstance().addActivity(this);      }        @ Override      protected void onActivityResult ( int requestCode , int resultCode , Intent data )      {          super.onActivityResult(requestCode, resultCode, data);            ContentResolver resolver = getContentResolver();          /**          * 因为两种方式都用到了startActivityForResult方法,          * 这个方法执行完后都会执行onActivityResult方法, 所以为了区别到底选择了那个方式获取图片要进行判断,          * 这里的requestCode跟startActivityForResult里面第二个参数对应          */          if (requestCode == 0)          {              try              {                  // 获得图片的uri                  Uri originalUri = data.getData();                  // 将图片内容解析成字节数组                  mContent = readStream(resolver.openInputStream(Uri.parse(originalUri.toString())));                  // 将字节数组转换为ImageView可调用的Bitmap对象                  myBitmap = getPicFromBytes(mContent, null);                  // //把得到的图片绑定在控件上显示                  preview.setImageBitmap(myBitmap);              } catch ( Exception e )              {                  System.out.println(e.getMessage());              }            } else if (requestCode == REQUEST_CAMERA){              try              {                  super.onActivityResult(requestCode, resultCode, data);                  Bundle extras = data.getExtras();                  myBitmap = (Bitmap) extras.get("data");                  ByteArrayOutputStream baos = new ByteArrayOutputStream();                  myBitmap.compress(Bitmap.CompressFormat.JPEG, 100, baos);                  mContent = baos.toByteArray();              } catch ( Exception e )              {                  e.printStackTrace();              }              // 把得到的图片绑定在控件上显示              preview.setImageBitmap(ImageUtil.toRoundCorner(myBitmap, 10));//把拍摄的照片转成圆角显示在预览控件上          }else if(requestCode==REQUEST_CALENDAR){              if(resultCode == RESULT_OK){                  happenDate.setCalendar(data.getIntExtra("year", 1900), data.getIntExtra("month", 0), data.getIntExtra("day", 1));              }          }      }        public static Bitmap getPicFromBytes ( byte[] bytes , BitmapFactory.Options opts )      {          if (bytes != null)              if (opts != null)                  return BitmapFactory.decodeByteArray(bytes, 0, bytes.length, opts);              else                  return BitmapFactory.decodeByteArray(bytes, 0, bytes.length);          return null;      }        public static byte[] readStream ( InputStream inStream ) throws Exception      {          byte[] buffer = new byte[1024];          int len = -1;          ByteArrayOutputStream outStream = new ByteArrayOutputStream();          while ((len = inStream.read(buffer)) != -1)          {              outStream.write(buffer, 0, len);          }          byte[] data = outStream.toByteArray();          outStream.close();          inStream.close();          return data;      }        @Override      public void onClick(View v) {          int id = v.getId();          switch(id){              case R.id.capture:{                  final CharSequence[] items =                  { "相册", "拍照" };                  AlertDialog dlg = new AlertDialog.Builder(CameraActivity.this).setTitle("选择图片").setItems(items,                          new DialogInterface.OnClickListener()                          {                              public void onClick ( DialogInterface dialog , int item )                              {                                  // 这里item是根据选择的方式,                                  // 在items数组里面定义了两种方式,拍照的下标为1所以就调用拍照方法                                  if (item == 1){                                      Intent getImageByCamera = new Intent("android.media.action.IMAGE_CAPTURE");                                      startActivityForResult(getImageByCamera, REQUEST_CAMERA);                                  } else{                                      Intent getImage = new Intent(Intent.ACTION_GET_CONTENT);                                      getImage.addCategory(Intent.CATEGORY_OPENABLE);                                      getImage.setType("image/jpeg");                                      startActivityForResult(getImage, 0);                                  }                              }                          }).create();                  dlg.show();              }              break;              /*case R.id.reCapture:{                 final CharSequence[] items =                 { "相册", "拍照" };                 AlertDialog dlg = new AlertDialog.Builder(CameraActivity.this).setTitle("选择图片").setItems(items,                         new DialogInterface.OnClickListener()                         {                             public void onClick ( DialogInterface dialog , int item )                             {                                 // 这里item是根据选择的方式,                                 // 在items数组里面定义了两种方式,拍照的下标为1所以就调用拍照方法                                 if (item == 1)                                 {                                     Intent getImageByCamera = new Intent("android.media.action.IMAGE_CAPTURE");                                     startActivityForResult(getImageByCamera, 1);                                 } else                                 {                                     Intent getImage = new Intent(Intent.ACTION_GET_CONTENT);                                     getImage.addCategory(Intent.CATEGORY_OPENABLE);                                     getImage.setType("image/jpeg");                                     startActivityForResult(getImage, 0);                                 }                             }                         }).create();                 dlg.show();             }             break;*/              case R.id.submit:{                  new PostThread().start();//开启线程提交数据              }              break;              case R.id.back:{                  CameraActivity.this.finish();//返回,销毁当前Activity              }              break;              default:              break;          }      }        }