示例代码如下:
//表示用于拍照的requestCode
private final int REQUEST_CODE_IMAGE_CAPTURE = 1;
//我们存储照片的输出路径,以便后续使用
private Uri imageOutputUri = null;
//拍照
private void captureImage(){
PackageManager pm = getPackageManager();
//先判断本机是否在硬件上有摄像能力
if(pm.hasSystemFeature(PackageManager.FEATURE_CAMERA)){
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
ComponentName componentName = intent.resolveActivity(pm);
//判断手机上有无摄像机应用
if(componentName != null){
//创建图片文件,以便于通过Uri.fromFile()生成对应的Uri
File imageFile = createImageFile();
if(imageFile != null){
//根据imageFile生成对应的Uri
imageOutputUri = Uri.fromFile(imageFile);
//利用该Uri作为拍照完成后照片的存储路径,注意,一旦设置了存储路径,我们就不能获取缩略图了
intent.putExtra(MediaStore.EXTRA_OUTPUT, imageOutputUri);
//调用startActivityForResult()方法,以便在onActivityResult()方法中进行相应处理
startActivityForResult(intent, REQUEST_CODE_IMAGE_CAPTURE);
}else{
Toast.makeText(this, "无法创建图像文件!", Toast.LENGTH_LONG).show();
}
}else{
Toast.makeText(this, "未在本机找到Camera应用,无法拍照!", Toast.LENGTH_LONG).show();
}
}else{
Toast.makeText(this, "本机没有摄像头,无法拍照!", Toast.LENGTH_LONG).show();
}
}
//创建图片文件,以便于通过Uri.fromFile()生成对应的Uri
private File createImageFile(){
File image = null;
//用时间戳拼接文件名称,防止文件重名
String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date());
String imageFileName = "JPEG_" + timeStamp + "_";
File storageDir = getExternalFilesDir(Environment.DIRECTORY_PICTURES);
try{
image = File.createTempFile(
imageFileName, //前缀
".jpg", //后缀
storageDir //文件夹
);
}catch (IOException e){
image = null;
e.printStackTrace();
Log.e("DemoLog", e.getMessage());
}
return image;
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent intent) {
//首先判断是否正确完成
if(resultCode == RESULT_OK){
switch (requestCode){
case REQUEST_CODE_IMAGE_CAPTURE:
//此处,我们可以通过imageOutputUri获取到我们想要的图片
String imagePath = imageOutputUri.toString();
Log.i("DemoLog", "照片路径是: " + imagePath);
Toast.makeText(this, "照片路径是: " + imagePath, Toast.LENGTH_LONG).show();
//以下代码尝试获取缩略图
//如果设置MediaStore.EXTRA_OUTPUT作为extra的时候,那么此处的intent为null,需要判断
if(intent != null){
Bitmap thumbnail = intent.getParcelableExtra("data");
//有的手机并不会给拍照的图片生成缩略图,所以此处也要判断
if(thumbnail != null){
Log.i("DemoLog", "得到缩略图");
}
}
default:
break;
}
}
}










