從本地獲取或者相機獲取圖片上傳

獲取圖片並且上傳到服務器,或者在當前頁面顯示,這種功能是很多軟件都需要的,最近也沒少用,今天就單獨寫了一個Demo,再次備份,方便以後再次用到能夠很方便的找到。

在MainActivity中,主要分兩個路,一路是調用相機拍照,一路是調用系統相冊,(通過一個AlertDialog實現兩路的選擇功能)。獲取圖片的bitmap,最後對bitmap進行相應的處理,你可以在當前頁面顯示,也可以上傳的到服務器,在延伸一下上傳到服務器之後一般服務器會返回一些參數,比如上傳成功與否,並且還有一些你需要處理的信息,這些參數通過handler進行傳遞,然後再handler中進行數據解析並作出相應的處理。我在這裏僅僅是把獲取的bitmap在當前的activity中進行顯示。

MainActivity.java

public class MainActivity extends Activity {

	private Button button1;	
	String SD_CARD_TEMP_DIR = Environment.getExternalStorageDirectory()
								+ File.separator + "tmpPhoto1.jpg";
	Bitmap bitmap = null;
	private ImageView imageView;
	
	@Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        imageView = (ImageView) findViewById(R.id.ItemImage);
        //找到button並且進行監聽
        button1 = (Button)findViewById(R.id.button1);
        button1.setOnClickListener(new OnClickListener() {
			@Override
			public void onClick(View v) {
				 final String[] items = { "相機拍攝", "手機相冊" };
				 new AlertDialog.Builder(MainActivity.this).setTitle("設置")
				 .setItems(items, new DialogInterface.OnClickListener() {
				
				 @Override
				 public void onClick(DialogInterface dialog,
	    			 int which) {
		    			 if (which == 0) {
			    			 Intent intent = new Intent(
			    			 MediaStore.ACTION_IMAGE_CAPTURE);
			    			 intent.putExtra(MediaStore.EXTRA_OUTPUT,
			    			 Uri.fromFile(new File(
			    			 SD_CARD_TEMP_DIR)));
			    			 startActivityForResult(intent, 1);
		    			 } else {
		    				 doPickPhotoFromGallery();
		    			 }
	    			 }
				 }).show();
			}
		});
    }
	
    @Override
	protected void onActivityResult(int requestCode, int resultCode, Intent data) {
		super.onActivityResult(requestCode, resultCode, data);
		if (requestCode == 1) {
			if (resultCode == Activity.RESULT_OK) {
				BitmapFactory.Options bitmapOptions = new BitmapFactory.Options();
				bitmapOptions.inSampleSize = 8;
				File file = new File(SD_CARD_TEMP_DIR);

				if (file.exists()) {
					Bitmap cameraBitmap = BitmapFactory.decodeFile(SD_CARD_TEMP_DIR, bitmapOptions);
					bitmap = cameraBitmap;
//					uploadFile(bitmap);
					imageView.setImageBitmap(bitmap);
				}

			}
		}
		else if (requestCode == 2) {
			if (resultCode == Activity.RESULT_OK) {
				Bitmap photo = data.getParcelableExtra("data");
				bitmap = photo;
				if (photo != null) {
//					uploadFile(bitmap);
					imageView.setImageBitmap(bitmap);
				}
			}
		}
	}
	
	// 請求Gallery程序
	protected void doPickPhotoFromGallery() {
		try {
			// Launch picker to choose photo for selected contact
			final Intent intent = getPhotoPickIntent();
			startActivityForResult(intent, 2);
		} catch (ActivityNotFoundException e) {
			Toast.makeText(this, "未能找到照片", Toast.LENGTH_LONG).show();
		}
	}

	// 封裝請求Gallery的intent
	public static Intent getPhotoPickIntent() {
		Intent intent = new Intent(Intent.ACTION_GET_CONTENT, null);
		intent.setType("image/*");
		intent.putExtra("crop", "true");
//		intent.putExtra("aspectX", 1);
//		intent.putExtra("aspectY", 2);
		intent.putExtra("outputX", 277);
		intent.putExtra("outputY", 373);
		intent.putExtra("return-data", true);
		return intent;
	}
}

uploadFile(bitmap)這個方法是去實現一些上傳文件的功能,一般都是上傳到服務器,在這個例子中沒有去添加這個功能。

Demo下載:http://download.csdn.net/detail/walker02/4161915





發佈了32 篇原創文章 · 獲贊 3 · 訪問量 55萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章