获取图片并且上传到服务器,或者在当前页面显示,这种功能是很多软件都需要的,最近也没少用,今天就单独写了一个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.youkuaiyun.com/detail/walker02/4161915