Android中级第十讲--相机录像和查看系统相册图片
博客出自:http://blog.csdn.net/liuxian13183,转载注明出处!
 All Rights Reserved !
录像比较简单,开始录制:
myCamera.unlock();
initVideo();
video_stop.setVisibility(View.VISIBLE);
// 设置视频文件输出的路径
String dir = CWFileUtil.getSaveVideoPath();
File dirFile = new File(dir);
if (!dirFile.exists()) {
if (!dirFile.mkdirs()) {
return;
}
}
File file = new File(dir, System.currentTimeMillis() + ".3gp");
mediarecorder.setOutputFile(file.getAbsolutePath());
try {
// 准备录制
mediarecorder.prepare();
// 开始录制
mediarecorder.start();
} catch (IllegalStateException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}void initVideo() {
if (mediarecorder == null) {
mediarecorder = new MediaRecorder();// 创建mediarecorder对象
// 设置录制视频源为Camera(相机)
mediarecorder.setCamera(myCamera);
// 录音源为麦克风
mediarecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
mediarecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);
// 设置录制完成后视频的封装格式THREE_GPP为3gp.MPEG_4为mp4
mediarecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
mediarecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
// 设置录制的视频编码h263 h264
mediarecorder.setVideoEncoder(MediaRecorder.VideoEncoder.H264);
// 视频编码
// mediarecorder.setVideoEncoder(MediaRecorder.VideoEncoder.DEFAULT);
// 音频编码
// mediarecorder.setAudioEncoder(MediaRecorder.AudioEncoder.DEFAULT);
// 预览
mediarecorder.setPreviewDisplay(surfaceView.getHolder()
.getSurface());
// 设置视频录制的分辨率。必须放在设置编码和格式的后面,否则报错
mediarecorder.setVideoSize(176, 144);
// 设置录制的视频帧率。必须放在设置编码和格式的后面,否则报错
mediarecorder.setVideoFrameRate(20);
mediarecorder.setPreviewDisplay(surfaceView.getHolder()
.getSurface());
}
}停止录制:
if (mediarecorder != null) {
mediarecorder.stop();// 停止录制
mediarecorder.release();// 释放资源
mediarecorder = null;
}
myCamera.lock();
video_stop.setVisibility(View.INVISIBLE);查看系统视频:
Intent videoIntent = new Intent(Intent.ACTION_DEFAULT);
videoIntent.setDataAndTypeAndNormalize(Uri.fromFile(CWFileUtil.getCurrentVideoPath()),
"video/3gp");
context.startActivity(videoIntent);注意:路径要具体到一个视频,通过这种方式查到最新录制的视频,然后通过系统相册的返回按钮可以查看其他视频。查看图片也是同样原理,只要把查看类型改为"image/*"即可。
但有的时候拍完的照片或者视频未显示,可以采用发方播的形式,让系统加载
正常情况下,用下面方法即可
Intent intent = new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE);
Uri uri = Uri.fromFile(new File(CWFileUtil.getSavePicPath()));
intent.setData(uri);
context.sendBroadcast(intent);但特殊情况下,这种不管用,可以用下面的方法,不过弱点的显示缓慢
context.sendBroadcast(new Intent(Intent.ACTION_MEDIA_MOUNTED, Uri
.parse("file://" + CWFileUtil.getScanPicPath())));
Android中级第十讲--相机录像和查看系统相册图片的更多相关文章
- Android7.0调用系统相机拍照、读取系统相册照片+CropImageView剪裁照片
		Android手机拍照.剪裁,并非那么简单 简书地址:[我的简书–T9的第三个三角] 前言 项目中,基本都有用户自定义头像或自定义背景的功能,实现方法一般都是调用系统相机–拍照,或者系统相册–选择照片 ... 
- android选取系统相册图片后,识别图中二维码
		项目中添加设备操作需要扫描二维码,考虑到多种扫码方式,也添加直接识别二维码图片的操作. 首先跳转系统相册选取图片 Intent intent = new Intent(Intent.ACTION_PI ... 
- Android为TV端助力 转载:Android绘图Canvas十八般武器之Shader详解及实战篇(上)
		前言 Android中绘图离不开的就是Canvas了,Canvas是一个庞大的知识体系,有Java层的,也有jni层深入到Framework.Canvas有许多的知识内容,构建了一个武器库一般,所谓十 ... 
- Android为TV端助力 转载:Android绘图Canvas十八般武器之Shader详解及实战篇(下)
		LinearGradient 线性渐变渲染器 LinearGradient中文翻译过来就是线性渐变的意思.线性渐变通俗来讲就是给起点设置一个颜色值如#faf84d,终点设置一个颜色值如#CC423C, ... 
- 有史来最大改变 Android 5.0十大新特性
		有史来最大改变 Android 5.0十大新特性 2014.10.16 14:51:31 来源:腾讯数码作者:腾讯数码 ( 0 条评论 ) 距离Android系统上一次重大更新不到一年的时间,谷歌 ... 
- 十一、Android学习第十天——项目开始(转)
		(转自:http://wenku.baidu.com/view/af39b3164431b90d6c85c72f.html) 十一.Android学习第十天——项目开始 Android知识点的学习告一 ... 
- Android高手进阶教程(二十八)之---Android ViewPager控件的使用(基于ViewPager的横向相册)!!!
		分类: Android高手进阶 Android基础教程 2012-09-14 18:10 29759人阅读 评论(35) 收藏 举报 android相册layoutobjectclassloade ... 
- Android 颜色渲染(十) ComposeShader组合渲染
		版权声明:本文为博主原创文章,未经博主允许不得转载. 目录(?)[+] Android 颜色处理(十) ComposeShader组合渲染 public ComposeShader(Shader sh ... 
- Java Web快速入门——全十讲
		Java Web快速入门——全十讲 这是一次培训的讲义,就是我在给学生讲的过程中记录下来的,非常完整,原来发表在Blog上,我感觉这里的学生可能更需要. 内容比较长,你可以先收藏起来,慢慢看. 第一讲 ... 
随机推荐
- CF817F MEX Queries(线段树上二分)
			题意 维护一个01串,一开始全部都是0 3种操作 1.把一个区间都变为1 2.把一个区间都变为0 3.把一个区间的所有数字翻转过来 每次操作完成之后询问区间最小的0的位置 l,r<=10^18 ... 
- [NOIP2010提高组]引水入城
			题目:洛谷P1514.Vijos P1777.codevs1066. 题目大意:有一个$n×m$的矩阵,每个点都有一个高度,可以在第一行的任意点建立蓄水厂.现在要把水输到最后一行的所有点上,规定水只能 ... 
- PostgreSQL创建只读用户
			创建用户及指定密码: CREATE USER readonly WITH ENCRYPTED PASSWORD 'ropass'; 设置用户默认事务只读: alter user readonly se ... 
- WPF获得PNG图片外观Path数据
			原文:WPF获得PNG图片外观Path数据 WPF开发界面的时候,用的最多的就是自定义控件模板,开发人员需要根据UI的设计,做出符合要求的自定义控件.但是在一些特殊情况下,UI的设计可能 ... 
- 如何在Google Play上通过电脑下载apk
			操作步骤: 1.首先打开翻 墙软件. 2.键入网址:http://apps.evozi.com/apk-downloader/ 3.将Google Play里apk的网址,复制到“Package na ... 
- ORA-01003: no statement parsed
			环境:delphi 5.BDE.oracle10 delphi里面用tStoreProc调用存储过程出现ORA-01003: no statement parsed. 解决方法:tStoreProc. ... 
- UVA 12716 GCD XOR(数论+枚举+打表)
			 题意:给你一个N,让你求有多少组A,B, 满足1<= B <= A <= N, 且 gcd(A,B) = A XOR B. 思路:首先我们能够得出两个结论: A-B > ... 
- libsvm 的使用
			1. libsvm 支持的SVM模型 官网地址:LIBSVM – A Library for Support Vector Machines libsvm 支持的 SVM 模型如下(C:classif ... 
- RPC和Socket
			RPC和Socket的区别 rpc是通过什么实现啊?socket! RPC(Remote Procedure Call,远程过程调用)是建立在Socket之上的,出于一种类比的愿望,在一台机器上运行的 ... 
- 130.C++经典面试题 52-100
