博客出自: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中级第十讲--相机录像和查看系统相册图片的更多相关文章

  1. Android7.0调用系统相机拍照、读取系统相册照片+CropImageView剪裁照片

    Android手机拍照.剪裁,并非那么简单 简书地址:[我的简书–T9的第三个三角] 前言 项目中,基本都有用户自定义头像或自定义背景的功能,实现方法一般都是调用系统相机–拍照,或者系统相册–选择照片 ...

  2. android选取系统相册图片后,识别图中二维码

    项目中添加设备操作需要扫描二维码,考虑到多种扫码方式,也添加直接识别二维码图片的操作. 首先跳转系统相册选取图片 Intent intent = new Intent(Intent.ACTION_PI ...

  3. Android为TV端助力 转载:Android绘图Canvas十八般武器之Shader详解及实战篇(上)

    前言 Android中绘图离不开的就是Canvas了,Canvas是一个庞大的知识体系,有Java层的,也有jni层深入到Framework.Canvas有许多的知识内容,构建了一个武器库一般,所谓十 ...

  4. Android为TV端助力 转载:Android绘图Canvas十八般武器之Shader详解及实战篇(下)

    LinearGradient 线性渐变渲染器 LinearGradient中文翻译过来就是线性渐变的意思.线性渐变通俗来讲就是给起点设置一个颜色值如#faf84d,终点设置一个颜色值如#CC423C, ...

  5. 有史来最大改变 Android 5.0十大新特性

    有史来最大改变 Android 5.0十大新特性 2014.10.16 14:51:31 来源:腾讯数码作者:腾讯数码 ( 0 条评论 )   距离Android系统上一次重大更新不到一年的时间,谷歌 ...

  6. 十一、Android学习第十天——项目开始(转)

    (转自:http://wenku.baidu.com/view/af39b3164431b90d6c85c72f.html) 十一.Android学习第十天——项目开始 Android知识点的学习告一 ...

  7. Android高手进阶教程(二十八)之---Android ViewPager控件的使用(基于ViewPager的横向相册)!!!

      分类: Android高手进阶 Android基础教程 2012-09-14 18:10 29759人阅读 评论(35) 收藏 举报 android相册layoutobjectclassloade ...

  8. Android 颜色渲染(十) ComposeShader组合渲染

    版权声明:本文为博主原创文章,未经博主允许不得转载. 目录(?)[+] Android 颜色处理(十) ComposeShader组合渲染 public ComposeShader(Shader sh ...

  9. Java Web快速入门——全十讲

    Java Web快速入门——全十讲 这是一次培训的讲义,就是我在给学生讲的过程中记录下来的,非常完整,原来发表在Blog上,我感觉这里的学生可能更需要. 内容比较长,你可以先收藏起来,慢慢看. 第一讲 ...

随机推荐

  1. ES6学习4 变量的解构赋值

    变量的解构赋值 一.数组结构赋值 1.数组结构赋值 let [a, b, c] = [1, 2, 3]; ES6 可以从数组中提取值,按照对应位置,对变量赋值. 1)  本质上,这种写法属于“模式匹配 ...

  2. vue动态绑定img标签的src地址

    问题代码: <li v-for="(item,index) in images" :key="index"> <img :src=" ...

  3. OpenJDK源码研究笔记(八)-详细解析如何读取Java字节码文件(.class)

    在上一篇OpenJDK源码研究笔记(七)–Java字节码文件(.class)的结构中,我们大致了解了Java字节码文件的结构. 本篇详细地介绍了如何读取.class文件的大部分细节. 1.构造文件  ...

  4. Unity C# 设计模式(五)建造者模式

    定义: 将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示. 组成部分: 1.Builder:给出一个抽象接口,以规范产品对象的各个组成成分的建造.这个接口规定要实现复杂对象的哪 ...

  5. oracle基础入门(四)

    一:其实oracle的语法跟sql servce 挺像的只有一些个别的差异而已 1):安装Oracle的数据库一般它的表中会自带了两站表: 是 emp(员工表) , dept(部门) 单表查询 sel ...

  6. USART

    串口通信是一种设备间非常常用的串行通行方式,其简单便捷,大部分电子设备都支持. 一.物理层 常用RS-232标准,主要规定了信号的用途.通信接口以及信号的电平标准.  “DB9接口”之间通过串口信号线 ...

  7. TI C66x DSP 四种内存保护问题 -之- 外设訪问corePac内部资源时的内存保护问题

    外设訪问corePac内部资源(L1,L2)时的内存保护等问题请參考以下两个blog.已经叙述的非常具体. "TI C66x DSP 系统events及其应用 - 2"," ...

  8. [Python] Use a Python Generator to Crawl the Star Wars API

    In this lesson, you will be introduced to Python generators. You will see how a generator can replac ...

  9. [Python] Boolean Or "Mask" Index Arrays filter with numpy

    NumPy Reference: Indexing Integer array indexing Boolean array indexing Note: The expression a < ...

  10. android 推断是否支持闪光灯

    近期在做录制视频功能,在找一些资料时发现 要推断是否支持闪关灯,在这记录下来,怕以后忘记 public static boolean isSupportCameraLedFlash(PackageMa ...