Android拍照、相册选择

在写应用中,经常用到头像,所以自己专门写了一个Activity来处理,直接返回所需要的数据,这里我返回的是Uri,再做处理,原理一样,大家可以根据自己应用的需求改相应的代码。

跳转到系统相机,注意设置拍照后照片的输出路径:
/**
 * 选择相机
 */
// 请求加载系统照相机
private static final int REQUEST_CAMERA = 100;
// 设置系统相机拍照后的输出路径
private File mTmpFile; 
private void showCameraAction() { // 跳转到系统照相机 Intent cameraIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); if(cameraIntent.resolveActivity(getPackageManager()) != null) { // 设置系统相机拍照后的输出路径 mTmpFile = createTmpFile(this); cameraIntent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(mTmpFile)); startActivityForResult(cameraIntent, REQUEST_CAMERA); } else{ Toast.makeText(this, "没有系统相机", Toast.LENGTH_SHORT).show(); }}
 
跳转到相册:
/**
 * 选择照片
 */
// 请求加载系统图片
private static final int REQUEST_PHOTO = 101;
private void showPhotoAction() { Intent photoIntent = new Intent(Intent.ACTION_GET_CONTENT); photoIntent.setType("image/*"); startActivityForResult(photoIntent, REQUEST_PHOTO);}
拍照、相册完成后,在onResultActivity中获得数据:
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
  super.onActivityResult(requestCode, resultCode, data);

  switch (requestCode) {
    case REQUEST_CAMERA: // 相机拍照完成后,返回图片路径
      if(resultCode == Activity.RESULT_OK) {
        if (mTmpFile != null) {
          cropImage(Uri.fromFile(mTmpFile), data);
        }
      } else{
        if(mTmpFile != null && mTmpFile.exists()){
          mTmpFile.delete();
          finish();
        }
      }
      break;

    case REQUEST_PHOTO: // 选择照片
      if (data == null) { 
        finish();
      }
      cropImage(data.getData(), data);
      break;

    case REQUEST_CROP_IMAGE: // 剪裁图片->同样返回Uri,不返回data
      if (data == null) {
        finish();
      }
      Intent intent2 = new Intent();
      intent2.putExtra(EXTRA_RESULT, mUri);
      setResult(RESULT_OK, intent2);
      finish();
      break;
    default:
      break;
  }
}
若需要裁剪,可以增加裁剪的代码,这里我添加了:
/**
 * 裁剪图片
 * @param uri
 */
private void cropImage(Uri uri, Intent data) {
  mUri = uri;
  if (isShowCrop == 1) { // 裁剪
    Intent intent1 = new Intent("com.android.camera.action.CROP");
    //intent1.setType("image/*");
    intent1.setDataAndType(uri, "image/jpeg");// data是图库选取文件传回的参数
    intent1.putExtra("crop", "true");
    intent1.putExtra("aspectX", 1);
    intent1.putExtra("aspectY", 1);
    intent1.putExtra("outputX", 120);
    intent1.putExtra("outputY", 120);
    intent1.putExtra("scale", true);
    intent1.putExtra("noFaceDetection", true);
    intent1.putExtra("return-data", false);
    intent1.putExtra(MediaStore.EXTRA_OUTPUT, uri);
    startActivityForResult(intent1, REQUEST_CROP_IMAGE);
  } else if (isShowCrop == 0){ // 不剪裁
    Intent intent2 = new Intent();
    intent2.putExtra(EXTRA_RESULT, uri);
    setResult(RESULT_OK, intent2);
    finish();
  }
}

后续还要增加传入存放照片的地址,图片压缩等,总之,根据自己的应用需求来吧,使之更好的为应用服务。
 
 
 
 

                
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值