先建立录像窗口 map_video.xml

android:layout_width="fill_parent"

android:layout_height="fill_parent" >

android:id="@+id/arc_hf_video_view"

android:layout_width="fill_parent"

android:layout_height="fill_parent" />

android:id="@+id/arc_hf_video_timer"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_margin="40dp"

android:textColor="#ffff0000"

android:textSize="35dp"

android:textStyle="bold" >

android:id="@+id/arc_hf_video_btn"

android:layout_width="wrap_content"

android:layout_height="fill_parent"

android:layout_alignParentRight="true"

android:gravity="center"

android:orientation="vertical" >

android:id="@+id/arc_hf_video_start"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:background="@drawable/arc_hf_video_start" />

android:id="@+id/arc_hf_video_return"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:background="@drawable/arc_hf_video_return" />

主类 ArcHFVideo.java

public class ArcHFVideo extends Activity implements SurfaceHolder.Callback {

private Button mVideoStartBtn, mVideoReturnBtn;

private SurfaceView mSurfaceview;

private MediaRecorder mMediaRecorder;

private SurfaceHolder mSurfaceHolder; //

private File mRecVedioPath;

private File mRecAudioFile;

private TextView timer;

private int hour = 0;

private int minute = 0;

private int second = 0;

private boolean bool;

private int parentId;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

this.requestWindowFeature(Window.FEATURE_NO_TITLE);

this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,

WindowManager.LayoutParams.FLAG_FULLSCREEN);

getWindow().setFormat(PixelFormat.TRANSLUCENT);

setContentView(R.layout.map_video);

parentId = getIntent().getIntExtra("parentId", 0);

timer = (TextView) findViewById(R.id.arc_hf_video_timer);

mVideoStartBtn = (Button) findViewById(R.id.arc_hf_video_start);

mVideoReturnBtn = (Button) findViewById(R.id.arc_hf_video_return);

mSurfaceview = (SurfaceView) this.findViewById(R.id.arc_hf_video_view);

// 设置计时器不可见

timer.setVisibility(View.GONE);

// 设置缓存路径

mRecVedioPath = new File(Environment.getExternalStorageDirectory()

.getAbsolutePath() + "/hfdatabase/temp/");

if (!mRecVedioPath.exists()) {

mRecVedioPath.mkdirs();

}

// 绑定预览视图

SurfaceHolder holder = mSurfaceview.getHolder();

holder.addCallback(ArcHFVideo.this);

holder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);

mVideoStartBtn.setOnClickListener(new Button.OnClickListener() {

private boolean isRecording = true;

@Override

public void onClick(View v) {

Drawable iconStart = getResources().getDrawable(

R.drawable.arc_hf_video_start);

Drawable iconStop = getResources().getDrawable(

R.drawable.arc_hf_video_stop);

if (isRecording) {

mVideoStartBtn.setBackgroundDrawable(iconStop);

bool = true;

if (mMediaRecorder == null)

mMediaRecorder = new MediaRecorder();

else

mMediaRecorder.reset();

mMediaRecorder.setPreviewDisplay(mSurfaceHolder

.getSurface());

mMediaRecorder

.setVideoSource(MediaRecorder.VideoSource.CAMERA);

mMediaRecorder

.setAudioSource(MediaRecorder.AudioSource.MIC);

mMediaRecorder

.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);

mMediaRecorder

.setVideoEncoder(MediaRecorder.VideoEncoder.H264);

mMediaRecorder

.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);

mMediaRecorder.setVideoSize(176, 144);

mMediaRecorder.setVideoFrameRate(15);

try {

mRecAudioFile = File.createTempFile("Vedio", ".3gp",

mRecVedioPath);

} catch (IOException e1) {

e1.printStackTrace();

}

mMediaRecorder.setOutputFile(mRecAudioFile

.getAbsolutePath());

try {

mMediaRecorder.prepare();

timer.setVisibility(View.VISIBLE);

handler.postDelayed(task, 1000);

mMediaRecorder.start();

} catch (Exception e) {

e.printStackTrace();

}

isRecording = !isRecording;

} else {

mVideoStartBtn.setBackgroundDrawable(iconStart);

if (mMediaRecorder != null) {

mMediaRecorder.stop();

bool = false;

timer.setText(format(hour) + ":" + format(minute) + ":"

+ format(second));

mMediaRecorder.release();

mMediaRecorder = null;

audioRename();

}

isRecording = !isRecording;

}

}

});

mVideoReturnBtn.setOnClickListener(new Button.OnClickListener() {

@Override

public void onClick(View v) {

if (mMediaRecorder != null) {

mMediaRecorder.stop();

mMediaRecorder.release();

mMediaRecorder = null;

}

audioRename();

finish();

}

});

}

@Override

public void surfaceCreated(SurfaceHolder holder) {

mSurfaceHolder = holder;

}

@Override

public void surfaceChanged(SurfaceHolder holder, int format, int width,

int height) {

mSurfaceHolder = holder;

}

@Override

public void surfaceDestroyed(SurfaceHolder holder) {

mSurfaceview = null;

mSurfaceHolder = null;

mMediaRecorder = null;

}

/*

* 生成Audio文件名字

*/

protected void audioRename() {

String path = Environment.getExternalStorageDirectory()

.getAbsolutePath()

+ "/hfdatabase/video/"

+ String.valueOf(parentId) + "/";

String fileName = new SimpleDateFormat("yyyyMMddHHmmss")

.format(new Date()) + ".3gp";

File out = new File(path);

if (!out.exists()) {

out.mkdirs();

}

out = new File(path, fileName);

mRecAudioFile.renameTo(out);

}

/*

* 定时器设置,实现计时

*/

private Handler handler = new Handler();

private Runnable task = new Runnable() {

public void run() {

if (bool) {

handler.postDelayed(this, 1000);

second++;

if (second < 60) {

timer.setText(format(second));

} else if (second < 3600) {

minute = second / 60;

second = second % 60;

timer.setText(format(minute) + ":" + format(second));

} else {

hour = second / 3600;

minute = (second % 3600) / 60;

second = (second % 3600) % 60;

timer.setText(format(hour) + ":" + format(minute) + ":"

+ format(second));

}

}

}

};

/*

* 格式化时间

*/

public String format(int i) {

String s = i + "";

if (s.length() == 1) {

s = "0" + s;

}

return s;

}

}

打开指定路径的video文件

File f = new File(filePath);

Intent intent = new Intent();

intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

intent.setAction(android.content.Intent.ACTION_VIEW);

intent.setDataAndType(Uri.fromFile(f), "video/*");

startActivity(intent);

【编辑推荐】

【责任编辑:杜若 TEL:(010)68476606】

点赞 0

打开录像 android,android录像/打开video文件相关推荐

  1. android 将app添加进入文件的打开方式

    今天,简单讲讲android里如何将自己的app添加进入文件的打开方式. 最近因为换租房的原因,状态很不好.今天尝试写点android的代码的内容.其实很简单,我们只需在AndroidManifest ...

  2. android打开wav格式,FileNotFoundException从Android资产中打开wav文件

    在我们的android应用程序中,我们打开位于assets/config/notification.wav中的wav文件.要打开和播放声音,我们使用下面的代码:FileNotFoundExceptio ...

  3. Android Studio 设置打开layout.xml文件的默认视图

    Android Studio 设置打开layout.xml文件的默认视图 Android Studio 设置打开layout.xml文件的默认视图 androd studio 在使用的时候打开我们自己 ...

  4. android studio创建md,如何在Android Studio中设置*md文件打开方式

    最近在Android Studio中写一些Demo的时候,会顺便在里面创建一个.md文件用来进行Demo笔记的书写.然而Android Studio不带有markdown预览功能,所以我就琢磨如何在A ...

  5. android saf 打开指定目录,并操作相关文件

    android saf 打开指定目录,并操作相关文件 saf存储访问框架(android 4.4 引入)全称 Storage Access Framework 用户可轻松在其所有首选文档存储提供程序中 ...

  6. android xml 加载错误提示,加载uixml文件失败 打开wps时显示“加载XML文件失败1

    打开wps时显示"加载XML文件失败." 打开wps时显示"加载XML文件失败1 关闭所有打开的Word文档: 开始 → 运行 → 粘贴上面复制的命令 → 确定. 在打开 ...

  7. Qt for Android 程序实现对手机文件的导入打开与导出保存

    一.概述 在Qt for Android下程序要实现这样的功能:对创建的数据以txt文件格式保存导出到手机内部存储器,并且可以随时的加载,导入到手机上运行的程序中.但是在Qt for Android下 ...

  8. android 打开网络pdf,Android 打开网络上pdf文件

    1.基本思路: 打开网络pdf 思路整体还是来源与图片的加载. android中加载网络图片的框架有很多个.如image-laoder, fresco.glide等,首先都是从内存中找图片,如果内存中 ...

  9. android 使用wps打开的xls没有刷新_Excel文件打开都变成了WPS,如何改回微软Excel

    电脑上很多时候原先保存得好好的Excel表格,有一天打开都是用WPS打开,怎么回事? 不用担心,这主要是我们安装了WPS(很多时候是在用户不留意的情况下捆绑安装的),电脑将Excel表格的默认打开方式 ...

最新文章

  1. Fiddler使用总结一(使用Fiddler捕获手机所有http/https通信)
  2. jquery操作radio/checkbox/select 及其相关
  3. 来个邪恶假说,假如有人把支付宝所有存储服务器炸了,我们在里边的钱是不是都丢了?
  4. UNIX再学习 -- exit 和 wait 系列函数
  5. mybatis-plus代码生成器简易使用
  6. (转载)spring配置hibernate 事务。
  7. pandas 空字符串与na区别_pandas中对nan空值的判断
  8. 你知道defer的坑吗?
  9. android 插件化 androdpluginmgr 扩展开发问题
  10. 终于在五一之前打了SP3
  11. 项目经理应该具备的技能和素质是什么?
  12. 求素数(质数)算法的N种境界 - 试除法和初级筛法
  13. 【LLS-Player】ninja : rtdSDK构建
  14. 微信Wifi物联架构---机智云/云智易如何接入微信硬件平台
  15. 怎么开发联机小游戏_微信小游戏创意大赛火热进行中,小游戏联机对战引擎免费用...
  16. [LaTex报错解决]Unicode character , (U+FF0C)
  17. 实战:吃货联盟和幸运大转盘
  18. API网易考拉,根据ID取商品详情
  19. 新增对象时生成uuid传递到数据库_技术译文 | UUID 很火但性能不佳?今天我们细聊一聊...
  20. C++ Primer Plus读书笔记第二章

热门文章

  1. fileReader字符流读取中文乱码的解决办法
  2. JVM——成为Java GC专家(1)
  3. 【ISO14229_UDS刷写】-1-$34诊断服务RequestDownload理论部分
  4. Hive教程(04)- Hive数据类型
  5. PCIe P2P传输软件设计
  6. SQL数据库管理—安全使用SSL加密连接
  7. 【QML】QML性能优化 | 3D场景优化
  8. Web前端-jQuery
  9. 传奇html5自己搭建,【新手篇】小白专用从0开始进行雷霆传奇H5手游搭建教程
  10. 783页19万字行政服务中心一网通办政务服务应用平台建设方案