博客出自: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. centeros安装jdk

    准备工作: java se下载网址:https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.ht ...

  2. Python解析Socket数据流异常bytes问题

    Python解析Socket数据流异常bytes问题 -- 2019-03-12 python在通过socket发送数据时,英文字符转义后为原来本身的字符,占一个字节(如:s转移后为s),而中文字符在 ...

  3. 紫书 例题 10-25 UVa 1363(找规律)

    可以发现余数是成一段一段的等差数列的. 在商数同的时候,余数是成首项为第一个数的余数,公差 为商数的等差数列. 利用这个性质求解即可. #include<cstdio> #include& ...

  4. 如何使用Java创建Excel(.xls 和 .xlsx)文件 并写入数据

    1,需要依赖的jar包, <!-- POI(operate excel) start --> <!-- the version of the following POI packag ...

  5. C++ 容器(一):顺序容器简介

    C++提供了使用抽象进行高效编程的方式,标准库中定义了许多容器类以及一系列泛型函数,使程序员可以更加简洁.抽象和有效地编写程序,其中包括:顺序容器,关联容器和泛型算法.本文将简介顺序容器(vector ...

  6. python通过sigar收集服务器信息

    http://blog.csdn.net/mirahs/article/details/49681787

  7. zookeeper 性能测试

    zookeeper压力测试:性能对比(3个节点,5个节点,7个节点 创建节点.删除节点.设置节点数据.读取节点数据性能及并发性能) 测试结果如下: 五次测试三节点结果: 创建100W节点用时:15.0 ...

  8. h5语音播放(移动端)

    <!--语音导航 start--> <div style="border:0px solid red;width:100%;height:72px;position:rel ...

  9. scikit-learn 为机器学习

    如何使用 scikit-learn 为机器学习准备文本数据   欢迎大家前往云+社区,获取更多腾讯海量技术实践干货哦~ 文本数据需要特殊处理,然后才能开始将其用于预测建模. 我们需要解析文本,以删除被 ...

  10. POJ 3271 BFS (大坑)

    被某人拉进了坑 完完全全被坑一天的题-- 题意: 正解思路: 先把每一个点搜一遍 预处理出它能在一步之内到的所有点 并连边 然后用一个类似DP的东西把方案数加起来就搞定了 (其实 也不是很难) 但是 ...