android照相及照片上傳
來源:互聯網
上載者:User
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; } } }