Android中相机拍照并获取路径
来源:互联网 发布:java和jsp的区别 编辑:程序博客网 时间:2024/05/16 10:13
在Android中系统中,调用系统相机拍照并取得照片的文件做进一步的使用(裁剪、显示在View控件上、上传文件等)。
第一种情况:调用系统相机拍照保存在系统中并在onActvitiyResult()方法中,获取文件的Uri或Bitmap对象。
代码如下:
------------------------------------------------------------------------------------------------
//调用系统相机拍照
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
//设置日期的转换格式
SimpleDateFormat timeStampFormat =new SimpleDateFormat("yyyy_MM_dd_HH_mm_ss");
//设置文件名
String filename =timeStampFormat.format(new Date());
//使用ContentValues保存文件名
ContentValues values = newContentValues();
values.put(MediaStore.Images.Media.TITLE, filename);
//使用内容提供者,定义照片保存的Uri
photoUri =getContentResolver().insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI,values);
intent.putExtra(MediaStore.EXTRA_OUTPUT, photoUri);
startActivityForResult(intent, CAMREA_REQUEST_CODE);
-------------------------------------------------------------------------------------------------
onActivityResult()方法中获取数据
-------------------------------------------------------------------------------------------------
//请求码等于相机的请求码,执行相应的操作
if (requestCode==CAMREA_REQUEST_CODE && requestcode ==RESULT_OK) {
//判断返回的数据data是否为空,在三星s5、华为p7等机型上面有data为空的现象
if (data != null &&data.getData() != null) {
uri = data.getData();
if(data.hasExtra("data")){
Bitmap thunbnail = data.getParcelableExtra("data"); //获取照片的Bitmap对象,并设置
}
}
//如果data数据为空,就令uri==之前指定保存的照片的photoUri
if(uri == null) {
if(photoUri != null) {
uri= photoUri;
startPhotoZoom1(uri);//裁剪照片的方法
}
}
}
-------------------------------------------------------------------------------------------------
第二种情况:调用系统相机拍照,将照片保存在固定的文件目录下,在onActivityResult()方法中获取图片信息。这种情况下就不会 发生data为null的现象。
代码如下:
------------------------------------------------------------------------------------------------
Intent intentFromCapture = newIntent(MediaStore.ACTION_IMAGE_CAPTURE);
File file = newFile(Environment.getExternalStorageDirectory().getPath()+"/wood/head/");
//是否是文件夹,不是就创建文件夹
if (!file.exists()) file.mkdirs();
//指定保存路径
cameraPath = Environment.getExternalStorageDirectory().getPath()+"/wood/head/" +
format.format(new Date()) + ".jpg";
File imageFile = new File(cameraPath);
//创建一个图片保存的Uri
Uri imageFileUri = Uri.fromFile(imageFile);
intentFromCapture.putExtra(MediaStore.Images.Media.ORIENTATION, 0);
//设置MediaStore.EXTRA_OUTPUT的输出路径为imageFileUri
intentFromCapture.putExtra(MediaStore.EXTRA_OUTPUT, imageFileUri);
startActivityForResult(intentFromCapture, CAMERA_REQUEST_CODE);
-------------------------------------------------------------------------------------------------
onActivityResult()方法中获取数据
-------------------------------------------------------------------------------------------------
/相机的请求编码
caseCAMERA_REQUEST_CODE:
isCamera =true;
startPhotoZoom(Uri.fromFile(newFile(cameraPath)));
break;
//相机、相册的图片再剪辑完 在这地方上传
caseRESULT_REQUEST_CODE:
if (isCamera){
upLoadPictrue(newFile(cameraPath));
}else {
String path =null;
if (android.os.Build.VERSION_CODES.KITKAT>= 19) {
path =new GetPicPath().getPath_above19(getActivity(),uri1);
}else{
path = getFilePath_below19(uri1);
}
upLoadPictrue(newFile(path));
}
break;
-------------------------------------------------------------------------------------------------
裁剪图片:代码如下:
public voidstartPhotoZoom1(Uri uri) {
SimpleDateFormat timeStampFormat =new SimpleDateFormat("yyyy_MM_dd_HH_mm_ss");
Filefile =new File(Environment.getExternalStorageDirectory().getPath()+"/wood/head/");
if(!file.exists())file.mkdirs();
//指定保存路径
String photoPath = Environment.getExternalStorageDirectory().getPath()+"/wood/head/"+
timeStampFormat.format(newDate()) +".jpg";
if(uri ==null) {
System.out.println("The uri is not exist.");
}
Filefile1 =new File(photoPath);
uri1=Uri.fromFile(file1);
Intent intent =new Intent("com.android.camera.action.CROP");
intent.setDataAndType(uri,"image/*");
intent.putExtra("crop","true");//可裁剪
intent.putExtra("aspectX",1);
intent.putExtra("aspectY",1);
intent.putExtra("outputX",320);
intent.putExtra("outputY",320);
intent.putExtra("scale",true);
intent.putExtra(MediaStore.EXTRA_OUTPUT,uri1);//输出到指定的uri中
intent.putExtra("return-data",false);//若为false则表示不返回数据
intent.putExtra("outputFormat", Bitmap.CompressFormat.JPEG.toString());
intent.putExtra("noFaceDetection",true);
startActivityForResult(intent,RESULT_REQUEST_CODE);
}
-------------------------------------------------------------------------------------------------
public voidstartPhotoZoom(Uri uri){
if (uri ==null) {
//System.out.println("The uri is null.");
}
Intent intent =new Intent("com.android.camera.action.CROP");
intent.setDataAndType(uri,"image/*");
intent.putExtra("crop","true");//可裁剪
intent.putExtra("aspectX",1);
intent.putExtra("aspectY",1);
intent.putExtra("outputX",320);
intent.putExtra("outputY",320);
intent.putExtra("scale",true);
intent.putExtra(MediaStore.EXTRA_OUTPUT,uri);
intent.putExtra("return-data",false);//若为false则表示不返回数据
intent.putExtra("outputFormat", Bitmap.CompressFormat.JPEG.toString());
intent.putExtra("noFaceDetection",true);
startActivityForResult(intent,RESULT_REQUEST_CODE);
}
- Android中相机拍照并获取路径
- android 实现调用相机拍照 获取照片路径并上传
- 调用android系统相机拍照并将图片传指定路径并获取相片
- Android中使用系统相机进行拍照并获取高清照片(一)
- Android调用系统相机拍照并获取图片
- Android 相机拍照获取图片并保存到指定位置。
- Android中相机拍照
- android中调用系统相机拍照并访问本地相册
- android 调用系统相机并获取图片路径
- Android调用相机拍照并返回路径和调用系统图库选择图片
- Android调用相机拍照并返回路径和调用系统图库选择图片
- 调用android系统相机拍照并保存
- 调用android系统相机拍照并保存
- 调用android系统相机拍照并保存
- 调用android系统相机拍照并保存
- 调用android系统相机拍照并保存
- android调用系统相机拍照并裁剪
- Android启动相机拍照并返回图片
- Learning Path for Machine Learning
- 【leetcode】225. Implement Stack using Queues
- java中常见异常
- c++ 友元类 练习题
- execute、executeQuery和executeUpdate之间的区别
- Android中相机拍照并获取路径
- 笔记+R︱风控模型中变量粗筛(随机森林party包)+细筛(woe包)
- "双向链表"-数据结构算法-之通俗易懂,完全解析
- Codeforces Round #358 (Div. 2) C. Alyona and the Tree (DFS)
- Chromium内核net模块disk cache/index file的文件存储机制
- iOS内存管理(3)-- iOS 代理要用weak修饰
- Mac adb 配置
- 打印各种形状三角形(Triangle Printing Program)
- Android获取一些常用信息