android中 拍照 视频 录音 显示缩略图
1、拍照
/*** 处理拍照录音 视频的点击事件* * @author 00*/class MyOnClickLitener implements OnClickListener {@Overridepublic void onClick(View v) {//申明意图对象Intent intent = null;//申明文件要保存的位置File dir = null;switch (v.getId()) {case R.id.id_btn_take_photo://初始化文件保存位置的对象dir = new File(SDCardUtils.getRootDirectory()+ "/gdmsaec/picture/");if (!dir.exists()) {//如果文件夹不存在 则创建dir.mkdirs();}//创建要保存的文件photoFile = new File(dir.getAbsolutePath(), "IMG_"+ DateFormatUtils.getPVAFormatDate() + ".jpg");// 打开系统相机intent = new Intent();//此句代码 代表拍照成功之后 直接保存拍照之后的图片到sdcad中的文件中 这样文件的质量是最好的 最清晰的intent.putExtra(MediaStore.EXTRA_OUTPUT,Uri.fromFile(photoFile));//设置打开系统相机的意图actionintent.setAction(MediaStore.ACTION_IMAGE_CAPTURE);//打开相机startActivityForResult(intent, Constants.OPEN_CAMERA);break;case R.id.id_btn_aideo:// 录音intent = new Intent();//设置打开录音的意图actionintent.setAction(Media.RECORD_SOUND_ACTION);startActivityForResult(intent, Constants.OPEN_AIDEO);break;case R.id.id_btn_video:// 视频//申明视频文件需要保存的文件夹dir = new File(SDCardUtils.getRootDirectory()+ "/gdmsaec/video/");if (!dir.exists()) {dir.mkdirs();}intent = new Intent();//初始化视频文件的名字videoFile = new File(dir.getAbsoluteFile(), "VID_"+ DateFormatUtils.getPVAFormatDate() + ".3gp");//此句代码 标识 视频录制成功后 直接保存到手机sdcrad中 以上面声明的文件名 命名intent.putExtra(MediaStore.EXTRA_OUTPUT,Uri.fromFile(videoFile));//设置打开视频录制的actionintent.setAction(MediaStore.ACTION_VIDEO_CAPTURE);startActivityForResult(intent, Constants.OPEN_VIDEO);break;case R.id.id_btn_upload:// 打开系统相册intent = new Intent();//过滤 选择的相册是所有类型的intent.setType("image/*");//设置actionintent.setAction(Intent.ACTION_GET_CONTENT);startActivityForResult(intent, Constants.OPEN_XIANGCE);break;}}}
2、拍照 视频 录音 成功时候的调用的方法
@Overrideprotected void onActivityResult(int requestCode, int resultCode, Intent data) {//当用户拍照 录音 视频 完成之后调用此方法//这里说明一下 如果之前在启动是设置 intent.putExtra(MediaStore.EXTRA_OUTPUT,Uri.fromFile(file));那么这里的data是获取不到返回的值得super.onActivityResult(requestCode, resultCode, data);if (resultCode == Activity.RESULT_OK) {switch (requestCode) {case CAMERA:cameraPopupWindow.dismiss();alertDialog(0,"拍照成功,是否上传至服务器?", photoFile);break;case VIDEO:cameraPopupWindow.dismiss();alertDialog(1,"录制成功,是否上传至服务器?", videoFile);break;case AUDIO://录音文件需要特殊处理一下Uri audioUri = data.getData();// String aa = Util.getPath(this, audioUri);// File fileAudio = new File(aa);// fileAudio.delete();try {AssetFileDescriptor descriptor = getContentResolver().openAssetFileDescriptor(audioUri, "r");FileInputStream fis = descriptor.createInputStream();File path = new File(SDCardUtils.getRootDirectory()+ "/gdmsaec/aideo/");if (!path.exists()) {path.mkdirs();}audioFile = new File(path.getAbsolutePath(), "AID_"+ DateFormatUtils.getPVAFormatDate() + ".amr");FileOutputStream fos = new FileOutputStream(audioFile);byte[] buffer = new byte[1024];int len = 0;while ((len = (fis.read(buffer))) != -1) {fos.write(buffer, 0, len);}fis.close();fos.close();} catch (Exception e) {//ToastUtils.showToast(mainActivity, e.getMessage());}cameraPopupWindow.dismiss();alertDialog(2,"录制成功,是否上传至服务器?", audioFile);break;case XIANGCE:cameraPopupWindow.dismiss();Uri uri = data.getData();String path = Util.getPath(this, uri);photoFile = new File(path);// Bitmap bitmap = BitmapFactory.decodeFile(path);alertDialog(3,"照片已选中,是否上传至服务器?", photoFile);break;}}
}
3、对话框提示
/*** 弹出是否上传文件的对话框* * @param str*/private void alertDialog(int i , String str, final File file) {Bitmap bitmap =null;if(i == 0){//拍照 获取缩略图bitmap = BitmapUtils.getImageThumbnail(file.getAbsolutePath(), 200, 200);}else if(i == 1){//获取视频的缩略图bitmap = BitmapUtils.getVideoThumbnail(file.getAbsolutePath(), 200, 200, Thumbnails.MINI_KIND);}DialogUtils.showDialog2(mainActivity, "温馨提示", bitmap, str,new DialogOnClickListenner() {@Overridepublic void btnConfirmClick(Dialog dialog) {dialog.dismiss();uploadFile(file);}@Overridepublic void btnCancelClick(Dialog dialog) {dialog.dismiss();}});}
4、获取缩略图的工具类
public class BitmapUtils {/*** 根据指定的图像路径和大小来获取缩略图 此方法有两点好处: 1.* 使用较小的内存空间,第一次获取的bitmap实际上为null,只是为了读取宽度和高度,* 第二次读取的bitmap是根据比例压缩过的图像,第三次读取的bitmap是所要的缩略图。 2.* 缩略图对于原图像来讲没有拉伸,这里使用了2.2版本的新工具ThumbnailUtils,使 用这个工具生成的图像不会被拉伸。* * @param imagePath* 图像的路径* @param width* 指定输出图像的宽度* @param height* 指定输出图像的高度* @return 生成的缩略图*/public static Bitmap getImageThumbnail(String imagePath, int width,int height) {Bitmap bitmap = null;BitmapFactory.Options options = new BitmapFactory.Options();options.inJustDecodeBounds = true;// 获取这个图片的宽和高,注意此处的bitmap为nullbitmap = BitmapFactory.decodeFile(imagePath, options);options.inJustDecodeBounds = false; // 设为 false// 计算缩放比int h = options.outHeight;int w = options.outWidth;int beWidth = w / width;int beHeight = h / height;int be = 1;if (beWidth < beHeight) {be = beWidth;} else {be = beHeight;}if (be <= 0) {be = 1;}options.inSampleSize = be;// 重新读入图片,读取缩放后的bitmap,注意这次要把options.inJustDecodeBounds 设为 falsebitmap = BitmapFactory.decodeFile(imagePath, options);// 利用ThumbnailUtils来创建缩略图,这里要指定要缩放哪个Bitmap对象bitmap = ThumbnailUtils.extractThumbnail(bitmap, width, height,ThumbnailUtils.OPTIONS_RECYCLE_INPUT);return bitmap;}/*** 获取视频的缩略图 先通过ThumbnailUtils来创建一个视频的缩略图,然后再利用ThumbnailUtils来生成指定大小的缩略图。* 如果想要的缩略图的宽和高都小于MICRO_KIND,则类型要使用MICRO_KIND作为kind的值,这样会节省内存。* * @param videoPath* 视频的路径* @param width* 指定输出视频缩略图的宽度* @param height* 指定输出视频缩略图的高度度* @param kind* 参照MediaStore.Images.Thumbnails类中的常量MINI_KIND和MICRO_KIND。* 其中,MINI_KIND: 512 x 384,MICRO_KIND: 96 x 96* @return 指定大小的视频缩略图*/public static Bitmap getVideoThumbnail(String videoPath, int width, int height,int kind) {Bitmap bitmap = null;// 获取视频的缩略图bitmap = ThumbnailUtils.createVideoThumbnail(videoPath, kind);System.out.println("w" + bitmap.getWidth());System.out.println("h" + bitmap.getHeight());bitmap = ThumbnailUtils.extractThumbnail(bitmap, width, height,ThumbnailUtils.OPTIONS_RECYCLE_INPUT);return bitmap;}
}
android中 拍照 视频 录音 显示缩略图相关推荐
- android中调用系统功能 来显示本地相册图片 拍照 视频 音频功能
android中调用系统功能 来显示本地相册图片 拍照 视频 音频功能 效果图如下: 本地相册跟拍照可直接调用系统功能 Intent img = new Intent(MediaStore.ACTIO ...
- Android中直播视频技术探究之---基础知识大纲介绍
该博客转载于猿是一种能够改变世界的动物!! 一.前言 最近各种视频直播app到处都是,各种霸屏,当然我们也是需要体验的,关于视频直播的软件这里就不介绍了,在不是技术的人来看,直播是一种潮流,是一种娱乐 ...
- 直播带货源码,Android中直播视频技术探究
一.前言 最近各种视频直播app到处都是,各种霸屏,当然我们也是需要体验的,关于视频直播的软件这里就不介绍了,在不是技术的人来看,直播是一种潮流,是一种娱乐方式,但是作为一个高技术的,我们除了看看,更 ...
- QT界面中实现视频帧显示的多种方法及应用
QT界面中实现视频帧显示的多种方法及应用 (一) 引言 1.1 视频帧在QT界面中的应用场景 1.2 不同方法的性能和适用性分析 1.2.1 使用QLabel和QPixmap 1.2.2 使用QPai ...
- android 弹出fragment,Android中ViewPager获取当前显示的Fragment
前言 在项目中,有时会用到在ViewPager中显示同样类型的Fragment,同时这样的Fragment的个数是动态的,但是PagerAdapter没有给我们提供getCurrentFragment ...
- Android 中拍照、相册选择、裁剪照片
一个多月没总结知识点了,差点连博客账号都忘了...好了,步入正题,在 Android 中调用摄像头拍照获取图片或者是从相册中选取图片是很常见的功能,比如某些 APP 上传头像的功能就是一个例子. ** ...
- android 调取数字键盘,如何在android中的EditText上显示数字键盘?
如何在android中的EditText上显示数字键盘? 我只是想在某个EditText具有焦点时立即切换到数字键盘模式. 13个解决方案 239 votes 您可以为EditText配置EditTe ...
- Android中Vitamio视频框架学习
概述 开发公司一个乐视TV项目时,本来有个播放视频广告的功能,到最后不了了之.虽然没有在项目中做要求,但是这个点子还是激起了我研究多媒体的好奇心.刚好后面遇到一款比较喜欢的视频APP魔力盒,上面视频播 ...
- Android中图片缓存、显示框架Glide的介绍与使用
1 介绍 Glide是一个快速高效的Android图片加载库,注重于平滑的滚动.Glide提供了易用的API,高性能.可扩展的图片解码管道(decode pipeline),以及自动的资源池技术. G ...
最新文章
- Linux下,各种解压缩命令集合
- 120种小狗图像傻傻分不清?用fastai训练一个分类器
- 如何改变Redis用不好的误区
- php如何从左往右轮播,js实现从左向右滑动式轮播图效果
- C++ 并发编程(四):基于 Asio 的线程池
- 编写你的第一个 Django 应用,第 3 部分
- 深度学习入行门槛太低,不开心!
- 【mosek.fusion】Primal SVM
- 【Ydui.js】------- JavaScript 判断手机终端 例如:移动终端,苹果终端,ipad 终端 等;
- 双网卡上网冲突解决_交换机如何设置,控制IP地址冲突故障
- ei会议和ei源刊的区别_Ei期刊和ei会议论文有哪些区别
- 在c语言中的变量分为三种类型,在C语言中的实型变量分为两种类型,它们是_______和__________ 答案:float
double...
- 服务器硬盘坏道修复教程视频,硬盘坏道修复工具使用教程
- 【跨境电商】EDM邮件营销完整指南(二):如何开展EDM营销活动
- android 开源fc模拟器_准备开发一款开源NES模拟器
- .net 初中级程序员招聘
- JavaScript之正则表达式验证邮箱,手机号码,身份证,网址,QQ,邮政编码,中文
- C# 串口测试 ASCII
- Linux云服务器VPS一键数据盘和系统盘合并磁盘方法
- PRes 语言常用参考