1.调用系统的照相机程序

  1. Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);  
  2. startActivityForResult(intent, TAKE_PHOTO_WITH_DATA); 

2.在onActivityResult中处理返回的data
final Bitmap photo = data.getParcelableExtra("data");
如果不需要做剪切处理就可以直接使用图片了,比如输出到ImageView上
imageView.setImageBitmap(photo);
如果需要做剪切处理,就继续向下执行

3.做剪切处理

  1. Intent intent = new Intent("com.android.camera.action.CROP");  
  2.       intent.setType("image/*");  
  3.       intent.putExtra("data", data);  
  4.       intent.putExtra("crop""true");  
  5.       intent.putExtra("aspectX"1);  
  6.       intent.putExtra("aspectY"1);  
  7.       intent.putExtra("outputX"128);  
  8.       intent.putExtra("outputY"128);  
  9.       intent.putExtra("return-data"true);  
  10. artActivityForResult(intent, PHOTO_PICKED_WITH_DATA); 

4.在onActivityResult中处理
与第二步相同。

完整代码:

  1. public class SdCardUriTestActivity extends Activity {  
  2.     /** Called when the activity is first created. */ 
  3.     private Button btnTake = null;  
  4.     private ImageView lblImage = null;  
  5.      
  6.     private static final int PHOTO_PICKED_WITH_DATA = 3021;  
  7.     private static final int CAMERA_WITH_DATA = 3023;  
  8.      
  9.     @Override 
  10.     public void onCreate(Bundle savedInstanceState) {  
  11.         super.onCreate(savedInstanceState);  
  12.         setContentView(R.layout.main);  
  13.          
  14.         btnTake = (Button)findViewById(R.id.btnTake);  
  15.         lblImage = (ImageView)findViewById(R.id.lblImage);  
  16.         btnTake.setOnClickListener(new View.OnClickListener() {  
  17.              
  18.             @Override 
  19.             public void onClick(View v) {  
  20.                 // TODO Auto-generated method stub  
  21.                 Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);  
  22.                 startActivityForResult(intent, CAMERA_WITH_DATA);  
  23.             }  
  24.         });  
  25.          
  26.     }  
  27.      
  28.     @Override 
  29.     protected void onActivityResult(int requestCode, int resultCode, Intent data) {  
  30.         // TODO Auto-generated method stub  
  31.         if(resultCode!=RESULT_OK)  
  32.             return;  
  33.         switch(requestCode){  
  34.         case CAMERA_WITH_DATA:  
  35.             final Bitmap photo = data.getParcelableExtra("data");  
  36.             if(photo!=null){  
  37.                 doCropPhoto(photo);  
  38.             }  
  39.         case PHOTO_PICKED_WITH_DATA:  
  40.             Bitmap photo1 = data.getParcelableExtra("data");  
  41.             if(photo1!=null){  
  42.                 lblImage.setImageBitmap(photo1);  
  43.             }  
  44.              
  45.         }  
  46.     }  
  47.      
  48.     protected void doCropPhoto(Bitmap data){  
  49.         Intent intent = getCropImageIntent(data);  
  50.         startActivityForResult(intent, PHOTO_PICKED_WITH_DATA);  
  51.     }  
  52.      
  53.     public static Intent getCropImageIntent(Bitmap data) {  
  54.         Intent intent = new Intent("com.android.camera.action.CROP");  
  55.         intent.setType("image/*");  
  56.         intent.putExtra("data", data);  
  57.         intent.putExtra("crop""true");  
  58.         intent.putExtra("aspectX"1);  
  59.         intent.putExtra("aspectY"1);  
  60.         intent.putExtra("outputX"128);  
  61.         intent.putExtra("outputY"128);  
  62.         intent.putExtra("return-data"true);  
  63.         return intent;  
  64.     }