android照相及照片上傳實現(xiàn)代碼
當前位置:點晴教程→知識管理交流
→『 技術文檔交流 』
本文章來介紹了關于手機開發(fā)之a(chǎn)ndroid來實現(xiàn)android照相及照片功能,有需要學習的同學可以參考一下。
代碼如下 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方法, * 這個方法執(zhí)行完后都會執(zhí)行onActivityResult方法, 所以為了區(qū)別到底選擇了那個方式獲取圖片要進行判斷, * 這里的requestCode跟startActivityForResult里面第二個參數(shù)對應 */ if (requestCode == 0) { try { // 獲得圖片的uri Uri originalUri = data.getData(); // 將圖片內(nèi)容解析成字節(jié)數(shù)組 mContent = readStream(resolver.openInputStream(Uri.parse(originalUri.toString()))); // 將字節(jié)數(shù)組轉(zhuǎn)換為ImageView可調(diào)用的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));//把拍攝的照片轉(zhuǎn)成圓角顯示在預覽控件上 }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是根據(jù)選擇的方式, // 在items數(shù)組里面定義了兩種方式,拍照的下標為1所以就調(diào)用拍照方法 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是根據(jù)選擇的方式, // 在items數(shù)組里面定義了兩種方式,拍照的下標為1所以就調(diào)用拍照方法 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();//開啟線程提交數(shù)據(jù) } break; case R.id.back:{ CameraActivity.this.finish();//返回,銷毀當前Activity } break; default: break; } } } 該文章在 2013/2/25 13:26:08 編輯過 |
關鍵字查詢
相關文章
正在查詢... |