1.调用系统的照相机程序
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(intent, TAKE_PHOTO_WITH_DATA);

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

3.做剪切处理
Intent intent = new Intent("com.android.camera.action.CROP");
intent.setType("image/*");
intent.putExtra("data", data);
intent.putExtra("crop", "true");
intent.putExtra("aspectX", 1);
intent.putExtra("aspectY", 1);
intent.putExtra("outputX", 128);
intent.putExtra("outputY", 128);
intent.putExtra("return-data", true);
startActivityForResult(intent, PHOTO_PICKED_WITH_DATA);

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

完整代码:
public class SdCardUriTestActivity extends Activity {
/** Called when the activity is first created. */
private Button btnTake = null;
private ImageView lblImage = null;

private static final int PHOTO_PICKED_WITH_DATA = 3021;
private static final int CAMERA_WITH_DATA = 3023;

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);

btnTake = (Button)findViewById(R.id.btnTake);
lblImage = (ImageView)findViewById(R.id.lblImage);
btnTake.setOnClickListener(new View.OnClickListener() {

@Override
public void onClick(View v) {
// TODO Auto-generated method stub
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(intent, CAMERA_WITH_DATA);
}
});

}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
// TODO Auto-generated method stub
if(resultCode!=RESULT_OK)
return;
switch(requestCode){
case CAMERA_WITH_DATA:
final Bitmap photo = data.getParcelableExtra("data");
if(photo!=null){
doCropPhoto(photo);
}
case PHOTO_PICKED_WITH_DATA:
Bitmap photo1 = data.getParcelableExtra("data");
if(photo1!=null){
lblImage.setImageBitmap(photo1);
}

}
}

protected void doCropPhoto(Bitmap data){
Intent intent = getCropImageIntent(data);
startActivityForResult(intent, PHOTO_PICKED_WITH_DATA);
}

public static Intent getCropImageIntent(Bitmap data) {
Intent intent = new Intent("com.android.camera.action.CROP");
intent.setType("image/*");
intent.putExtra("data", data);
intent.putExtra("crop", "true");
intent.putExtra("aspectX", 1);
intent.putExtra("aspectY", 1);
intent.putExtra("outputX", 128);
intent.putExtra("outputY", 128);
intent.putExtra("return-data", true);
return intent;
}
}

布局文件略
注:1.6的sdk运行此代码会出现问题,具体原因还在调查。也希望知道原因的朋友帮帮忙。

更多相关文章

  1. android 复制、剪切、粘贴
  2. android 音效处理 (2)
  3. Android开发之消息处理机制(一)——Handler
  4. android 音效处理 (2)
  5. android.support.v7使用,出错处理
  6. android中SqLite query中用selectionArgs处理字符传值
  7. android引入so文件常见问题
  8. 怎么去掉联系人、通话记录、拨号列表界面中的电话号码中间的空格
  9. Native Activity讲解

随机推荐

  1. Android(安卓)实现在ImageView上绘图
  2. android 使用AndroidAnnotations注解简化
  3. pandaboard ES学习之旅——1 制作烧写SD
  4. Android(安卓)orm框架Sugar1.4源码(映射
  5. Android(安卓)Studio使用笔记
  6. [Android]使用全局变量传递数据
  7. 在Android项目中引入JsBridge时需要注意
  8. unity3D,PC、Android、IOS将内容复制到剪
  9. 获取系统电量
  10. Android(安卓)Fragment详解