之前在网上找了很多调用相册和手机相机的demo,但是在android4.0上运行的话调用相册时都会抛异常,后来在朋友的帮助下换了一个方法,很简单,希望对大家有帮助,解决了调用本地相册的问题。欢迎发现问题的朋友多多交流。以下是代码
AlertDialog.Builder localBuilder = new AlertDialog.Builder(
MsgActivity.this).setTitle("选择相片");
String[] arrayOfString = new String[2];
arrayOfString[0] = "拍一张新相片";
arrayOfString[1] = "从相册中选取";
localBuilder
.setItems(arrayOfString,
new DialogInterface.OnClickListener() {
public void onClick(
DialogInterface
paramDialogInterface,
int paramInt) {
switch (paramInt) {
default:
case 0:
getPicFromCapture();
break;
case 1:
getPicFromContent();
break;
}
}
}).setNegativeButton("取消", null).show();
private void getPicFromCapture() {
try {
// 拍照我们用Action为MediaStore.ACTION_IMAGE_CAPTURE,
// 有些人使用其他的Action但我发现在有些机子中会出问题,所以优先选择这个
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
intent.setAction(MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(intent, 1);
} catch (Exception e) {
e.printStackTrace();
}
}
private void getPicFromContent() {
try {
// 选择照片的时候也一样,我们用Action为Intent.ACTION_GET_CONTENT,
// 有些人使用其他的Action但我发现在有些机子中会出问题,所以优先选择这个
Intent intent = new Intent();
intent.setType("image/*");
intent.setAction(Intent.ACTION_GET_CONTENT);
startActivityForResult(intent, 2);
} catch (ActivityNotFoundException e) {
}
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (resultCode != RESULT_OK) {
return;
}
if (data != null) {
// 取得返回的Uri,基本上选择照片的时候返回的是以Uri形式,但是在拍照中有得机子呢Uri是空的,所
以要特别注意
Uri mImageCaptureUri = data.getData();
// 返回的Uri不为空时,那么图片信息数据都会在Uri中获得。如果为空,那么我们就进行下面的方式获
取
if (mImageCaptureUri != null) {
Bitmap image;
try {
// 这个方法是根据Uri获取Bitmap图片的静态方法
image = MediaStore.Images.Media.getBitmap(
this.getContentResolver(), mImageCaptureUri);
if (image != null) {
commentphoto.setImageBitmap(image);
}
} catch (Exception e) {
e.printStackTrace();
}
} else {
Bundle extras = data.getExtras();
if (extras != null) {
// 这里是有些拍照后的图片是直接存放到Bundle中的所以我们可以从这里面获取
Bitmap图片
Bitmap image = extras.getParcelable("data");
if (image != null) {
commentphoto.setImageBitmap(image);
}
}
}
}
}