//表示用于拍照的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;
}
}
}
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" android:maxSdkVersion="18"></uses-permission>
//表示用于录视频的requestCode
private final int REQUEST_CODE_VIDEO_CAPTURE = 2;
//我们存储视频的输出路径,以便后续使用
private Uri videoOutputUri = null;
//摄像
private void captureVideo(){
PackageManager pm = getPackageManager();
//先判断本机是否在硬件上有摄像能力
if(pm.hasSystemFeature(PackageManager.FEATURE_CAMERA)){
//将intent的action设置为MediaStore.ACTION_VIDEO_CAPTURE
Intent intent = new Intent(MediaStore.ACTION_VIDEO_CAPTURE);
ComponentName componentName = intent.resolveActivity(pm);
//判断手机上有无摄像机应用
if(componentName != null){
//创建视频文件,以便于通过Uri.fromFile()生成对应的Uri
File videoFile = createVideoFile();
if(videoFile != null){
//根据videoFile生成对应的Uri
videoOutputUri = Uri.fromFile(videoFile);
//利用该Uri作为摄像完成后视频的存储路径
intent.putExtra(MediaStore.EXTRA_OUTPUT, videoOutputUri);
//调用startActivityForResult()方法,以便在onActivityResult()方法中进行相应处理
startActivityForResult(intent, REQUEST_CODE_VIDEO_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 createVideoFile(){
File videoFile = null;
//用时间戳拼接文件名称,防止文件重名
String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date());
String imageFileName = "MP4" + timeStamp + "_";
File storageDir = getExternalFilesDir(Environment.DIRECTORY_MOVIES);
try{
videoFile = File.createTempFile(
imageFileName, //前缀
".mp4", //后缀
storageDir //文件夹
);
}catch (IOException e){
videoFile = null;
e.printStackTrace();
Log.e("DemoLog", e.getMessage());
}
return videoFile;
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent intent) {
//首先判断是否正确完成
if(resultCode == RESULT_OK){
switch (requestCode){
case REQUEST_CODE_VIDEO_CAPTURE:
//如果设置MediaStore.EXTRA_OUTPUT作为extra的时候,
//在有的手机上,此处的intent为不为null,但是在有的手机上却为null,
//所以不建议从intent.getData()中获取视频路径
//我们应该自己记录videoOutputUri来得知视频路径,下面注释的代码不建议使用
/*if(intent != null){
Uri videoUri = intent.getData();
if(videoUri != null){
//路径格式如content://media/external/video/media/130025
Log.i("DemoLog", "视频路径是: " + videoUri.toString());
}
}*/
String videoPath = videoOutputUri.toString();
//1.如果没有设置MediaStore.EXTRA_OUTPUT作为视频文件存储路径,那么路径格式如下所示:
// 路径格式如content://media/external/video/media/130025
//2.如果设置了MediaStore.EXTRA_OUTPUT作为视频文件存储路径,那么路径格式如下所示:
// 路径格式如file:///storage/sdcard0/Android/data/com.ispring.commonintents/files/Movies/MP420150919_184132_533002075.mp4
Log.i("DemoLog", "视频路径是: " + videoPath);
Toast.makeText(this, "视频路径是: " + videoPath, Toast.LENGTH_LONG).show();
break;
default:
break;
}
}
}
机械节能产品生产企业官网模板...
大气智能家居家具装修装饰类企业通用网站模板...
礼品公司网站模板
宽屏简约大气婚纱摄影影楼模板...
蓝白WAP手机综合医院类整站源码(独立后台)...苏ICP备2024110244号-2 苏公网安备32050702011978号 增值电信业务经营许可证编号:苏B2-20251499 | Copyright 2018 - 2025 源码网商城 (www.ymwmall.com) 版权所有