之前在网上找了很多调用相册和手机相机的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);
  
   }
    }
  
 }
  }
}
android 4.0 调用相册 返回uri为空的问题,布布扣,bubuko.com
原文:http://www.cnblogs.com/chunjiaodelei/p/3630950.html