/**
* @description: 拍照或录影工具
* @author chenshiqiang E-mail:csqwyyx@163.com
* @date 2014年5月4日 下午7:48:15
* @version 1.0
*/
package com.csq.thesceneryalong.utils;
import java.io.File;
import java.io.IOException;
import android.app.Activity;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.Bitmap.CompressFormat;
import android.media.CamcorderProfile;
import android.net.Uri;
import android.provider.MediaStore;
import android.text.TextUtils;
import android.widget.Toast;
import com.csq.thesceneryalong.R;
import com.csq.thesceneryalong.constant.PathConstants;
public class CaptureMediaUtil {
/**
* 照片数据回调
*/
public static final int REQUESTCODE_PICTURE = 100;
/**
* 视频数据回调
*/
public static final int REQUESTCODE_VIDEO = 200;
/**
* 当前照片路径,文件路径CaptureMediaUtil.curPacturePath
*/
private static String curPicturePath = null;
/**
* 拍照获取图片
*/
public static void takePicture(Activity context) {
Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
// Ensure that there's a camera activity to handle the intent
if (takePictureIntent.resolveActivity(context.getPackageManager()) != null) {
curPicturePath = getTempMediaPath(MediaType.image);
// Create the File where the photo should go
//不设置MediaStore.EXTRA_OUTPUT仅会返回缩略图
//如果指定了目标uri,返回data=null,如果没有指定uri,则data!=null
takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT,
Uri.fromFile(new File(curPicturePath)));
context.startActivityForResult(takePictureIntent, REQUESTCODE_PICTURE);
}else{
Toast.makeText(
context,
context.getResources().getString(
R.string.no_camera_intent),
Toast.LENGTH_LONG).show();
}
}
/**
* @description: 录制视频
* @author: chenshiqiang E-mail:csqwyyx@163.com
* @param context
*/
public static void recordVideo(Activity context) {
Intent intent = new Intent(MediaStore.ACTION_VIDEO_CAPTURE);
if (intent.resolveActivity(context.getPackageManager()) != null) {
// 视频质量
intent.putExtra(MediaStore.EXTRA_VIDEO_QUALITY,
CamcorderProfile.QUALITY_HIGH);
// 视频文件位置,报错!!!
/*intent.putExtra(MediaStore.EXTRA_OUTPUT,
Uri.fromFile(new File(getTempMediaPath(MediaType.video))));*/
// 视频时间限制,秒
intent.putExtra(MediaStore.EXTRA_DURATION_LIMIT, 180);
context.startActivityForResult(intent, REQUESTCODE_VIDEO);
}else{
Toast.makeText(
context,
context.getResources().getString(
R.string.no_camera_intent),
Toast.LENGTH_LONG).show();
}
}
/**
* @description: 处理数据回调,保证按照用户设定的文件路径curImagePath来返回文件
* @author: chenshiqiang E-mail:csqwyyx@163.com
* @param requestCode
* @param resultCode
* @param data
* @return
*/
public static MediaData handleActivityResult(Activity activity, int requestCode, int resultCode, Intent data){
MediaData result = null;
if (resultCode == Activity.RESULT_OK) {
switch (requestCode) {
case REQUESTCODE_PICTURE:
if(!TextUtils.isEmpty(curPicturePath)
&& new File(curPicturePath).exists()){
result = new MediaData(MediaType.image, curPicturePath);
}else{
if(data == null){
return null;
}
Uri dt = data.getData();
if(dt != null){
String path = dt.getPath();
if(!TextUtils.isEmpty(path)
&& new File(path).exists()){
result = new MediaData(MediaType.image, path);
}else{
String pu = FileUtil.getPathFromUri(activity, dt);
if(!TextUtils.isEmpty(pu)
&& new File(pu).exists()){
result = new MediaData(MediaType.image, pu);
}
}
}else{
if(data.getExtras() != null){
Bitmap bm = data.getExtras().getParcelable("data");
String cp = getTempMediaPath(MediaType.image);
if(bm != null && BitmapUtil.saveBitmap(bm, cp, CompressFormat.JPEG, 100)){
result = new MediaData(MediaType.image, cp);
}
}
}
}
break;
case REQUESTCODE_VIDEO:
if(data == null){
return null;
}
Uri vdt = data.getData();
if(vdt != null){
String path = vdt.getPath();
if(!TextUtils.isEmpty(path)
&& new File(path).exists()){
result = new MediaData(MediaType.video, path);
}else{
String pu = FileUtil.getPathFromUri(activity, vdt);
if(!TextUtils.isEmpty(pu)
&& new File(pu).exists()){
result = new MediaData(MediaType.video, pu);
}
}
}
break;
default:
break;
}
}
return result;
}
/**
* @description: 根据当前时间获取缓存路径
* @author: chenshiqiang E-mail:csqwyyx@163.com
* @param mediaType
* @return
*/
public static String getTempMediaPath(MediaType mediaType){
File cachePath = new File(PathConstants.getMediacachepath());
if(!cachePath.exists()){
cachePath.mkdirs();
}
if(mediaType == MediaType.image){
return cachePath.getAbsolutePath() + File.separator
+ DateUtils.getFormatedDateYMDHMSFile(System.currentTimeMillis())
+ ".jpg";
}else{
String videoPath = cachePath.getAbsolutePath() + File.separator
+ DateUtils.getFormatedDateYMDHMSFile(System.currentTimeMillis())
+ ".mp4";
File f = new File(videoPath);
if (!f.exists()){
try {
f.createNewFile();
} catch (IOException e) {
e.printStackTrace();
}
}
return videoPath;
}
}
public static enum MediaType{
image,
video
}
public static class MediaData{
public MediaType mediaType;
public String filePath;
public MediaData(MediaType mediaType, String filePath) {
super();
this.mediaType = mediaType;
this.filePath = filePath;
}
}
}