从本地获取或者相机获取图片上传

获取图片并且上传到服务器,或者在当前页面显示,这种功能是很多软件都需要的,最近也没少用,今天就单独写了一个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万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章