转载:http://www.jianshu.com/p/7052add136f2
之前一直不了解相机这里,也尝试写过但总是出错,这篇文章讲的很明白,特此记录,
主要介绍了打开相机进行拍照之后,获取拍照后的照片
问题1.调用系统相机拍照,并且把图片返回流程是什么?
答:1.定义一个Uri用来标记相机拍摄的照片
2.通过系统的action打开系统相机,同时传递Uri
3.拍照之后点击确定回调 onActivityResult()方法,在该方法中 获取拍照返回的Uri
注意 :有的手机的Uri此时传递回 onActivityResult 时,通过 data.getDatd( )时,为空,
这时可以用一个变量引用之前的Uri就好了;在返回的data中的是一个压缩过的Bitmap,
而且压缩的比较厉害,所以根本不会产生OOM异常作者试过之后,确实是一个清晰度
相当低的一张图片,根本不能满足需求,所以需要返回原图,当然这个原图是需要处理
的,否则依然会出现OOM
问题2 .图片保存路径,总是分不清楚,图片存在哪里,返回Uri的话,图片Uri可以转化为图片的路径string
path: 系统相册的路径
String path=Environment.getExternalStorageDirectory( )+File.separator+
Environmen.DIRECTORY_DCIM+ File.separator;
即path : /storage/emulated/0/DCIM/
存储图片(文件)的 名字 ,按照时间来命名:
private String getPhoneFileName(){
Date date =new Date(System.currentTimeMillis( ));
SimpleDateFormat dateFormat=new SimpleDateFormat("yyyyMMdd_HHmmss");
return "IMG_"+dateFormat.format(date);
}
图片存储的地址 = path+文件名+“.jpg”
问题3.涉及的权限
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.CAMERA"/>
下面是具体的步骤:
正常调用相机,在
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(intent, REQUEST_CODE);
然后重写onActivityResult
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
}
}
上面是整体的框架,下面是具体的代码:
String state = Environment.getExternalStorageState(); if (state.equals(Environment.MEDIA_MOUNTED)) { File file = new File(path); if (!file.exists()) { file.mkdir(); } String fileName = getPhotoFileName() + ".jpg"; //图片的文件名 Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); photoUri = Uri.fromFile(new File(path + fileName));//记录图片的uri intent.putExtra(MediaStore.EXTRA_OUTPUT, photoUri); //photoUri就是图片存储的位置 startActivityForResult(intent, REQUEST_CODE); }关于 图片返回部分 ,如下
@Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (resultCode != RESULT_OK) { return; } if (requestCode == REQUEST_CODE) { Log.d(TAG, "开始回调"); Uri uri = null; if (data != null && data.getData() != null) { uri = data.getData(); } if (uri == null) { //如果是空的,使用记录的Uri if (photoUri != null) { uri = photoUri; } } }
打开相机 ,拍照 ,完成 ,返回的图片,如图:
介绍到这里