//请求码类
public class CodeFlag {//调取系统相册的请求码
public static final int FLAG_REQUEST_CODE=0x111;
//调取系统相机的请求码
public static final int FLAG_REQUEST_CAMERA_CODE=0x112;
//调用系统裁剪之后的请求码
public static final int FLAG_REQUEST_CROP_CODE=0x113;
}
//实现照相机功能的方法
import java.io.File;
import android.net.Uri;
import android.os.Bundle;
import android.os.Environment;
import android.os.Parcelable;
import android.provider.MediaStore;
import android.app.Activity;
import android.content.Intent;
import android.graphics.Bitmap;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewDebug.FlagToString;
import android.widget.Button;
import android.widget.ImageView;
public class MainActivity extends Activity implements OnClickListener {
private Button button_open_album;
private Button button_open_camera;
private ImageView image_show;
private String path = "";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
button_open_album = (Button) findViewById(R.id.button_open_album);
button_open_camera = (Button) findViewById(R.id.button_open_camera);
image_show = (ImageView) findViewById(R.id.image_show);
if (Environment.getExternalStorageState().equals(
Environment.MEDIA_MOUNTED)) {
File file = Environment.getExternalStorageDirectory();
path = file.getAbsolutePath()+"/DCIM/heguozhong.jpg";
}
button_open_album.setOnClickListener(this);
button_open_camera.setOnClickListener(this);
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.button_open_album:
// 调用系统相册,隐式调用
Intent intent = new Intent(Intent.ACTION_PICK);
intent.setType("image/*");
startActivityForResult(intent, CodeFlag.FLAG_REQUEST_CODE);
break;
case R.id.button_open_camera:
// 调用系统相机,隐式调用
Intent intent2 = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
File f = new File(path);
intent2.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(f));
startActivityForResult(intent2, CodeFlag.FLAG_REQUEST_CAMERA_CODE);
break;
default:
break;
}
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
// 判断是我们调用并且系统正常返回的
if (resultCode == RESULT_OK) {
if (requestCode == CodeFlag.FLAG_REQUEST_CODE) {
// 接收从系统相册返回的图片
Uri uri = data.getData();
crop(uri);
image_show.setImageURI(uri);
}else if (requestCode==CodeFlag.FLAG_REQUEST_CROP_CODE) {
// 代表调用系统裁剪之后返回的数据
Bitmap bitmap = data.getParcelableExtra("data");
image_show.setImageBitmap(bitmap);
}else if (requestCode==CodeFlag.FLAG_REQUEST_CAMERA_CODE) {
// 代表调用系统相机返回的数据
File file = new File(path);
Uri uri = Uri.fromFile(file);
crop(uri);
image_show.setImageURI(uri);
}
}
}
private void crop(Uri uri) {
// 定义一个隐式Intent调用系统裁剪
Intent intent = new Intent("com.android.camera.action.CROP");
// 设置一个源文件和文件类型
intent.setDataAndType(uri, "image/*");
// 定义裁剪的比例,aspectX和aspectY是固定的名字,代表宽和高的比例
intent.putExtra("aspectX", 1);
intent.putExtra("aspectY", 1);
// 定义裁剪的宽和高像素值
intent.putExtra("outputX", 500);
intent.putExtra("outputY", 500);
// 让裁剪之后的数据进行返回,一定要传一下值
intent.putExtra("return-data", true);
startActivityForResult(intent, CodeFlag.FLAG_REQUEST_CROP_CODE);
}
}