转于:http://blog.csdn.net/ouyang_peng/article/details/12068331

---------------------------------------------------------------------------------------------

下面就看看该小例子的代码吧。

文件1.该应用的布局文件,res/layout/main.xml

[html] view plain copy
  1. <!--帧布局-->
  2. <FrameLayoutxmlns:android="http://schemas.android.com/apk/res/android"
  3. android:layout_width="fill_parent"android:layout_height="fill_parent">
  4. <!--用来展示画面-->
  5. <SurfaceViewandroid:id="@+id/surfaceView"
  6. android:layout_width="fill_parent"android:layout_height="fill_parent"/>
  7. <!--相对布局,该界面默认不显示出来,当触摸屏幕时候显示出来-->
  8. <RelativeLayoutandroid:layout_width="fill_parent"
  9. android:layout_height="fill_parent"android:visibility="gone"
  10. android:id="@+id/buttonlayout">
  11. <!--刻录按钮-->
  12. <Buttonandroid:layout_width="wrap_content"
  13. android:layout_height="wrap_content"android:layout_alignParentRight="true"
  14. android:layout_alignParentBottom="true"android:layout_marginRight="10dp"
  15. android:text="@string/recoderbutton"android:onClick="recoder"
  16. android:id="@+id/recoderbutton"/>
  17. <!--停止按钮-->
  18. <Buttonandroid:layout_width="wrap_content"
  19. android:layout_height="wrap_content"android:layout_toLeftOf="@id/recoderbutton"
  20. android:layout_alignTop="@id/recoderbutton"android:layout_marginRight="30dp"
  21. android:text="@string/stopbutton"android:onClick="stop"
  22. android:id="@+id/stopbutton"
  23. android:enabled="false"/>
  24. </RelativeLayout>
  25. </FrameLayout>


文件2:布局文件所用到的资源文件,res/values/string.xml

[html] view plain copy
  1. <?xmlversion="1.0"encoding="utf-8"?>
  2. <resources>
  3. <stringname="hello">HelloWorld,RecoderActivity!</string>
  4. <stringname="app_name">视频刻录小例子</string>
  5. <stringname="recoderbutton">刻录</string>
  6. <stringname="stopbutton">停止</string>
  7. <stringname="noSDcard">检测到手机没有存储卡!请插入手机存储卡再开启本应用</string>
  8. <stringname="maxDuration">已经达到最长录制时间</string>
  9. </resources>


文件3:该应用的主程序,RecoderActivity.java

[java] view plain copy
  1. packagecn.oyp.recoder;
  2. importjava.io.File;
  3. importandroid.app.Activity;
  4. importandroid.content.pm.ActivityInfo;
  5. importandroid.media.MediaRecorder;
  6. importandroid.media.MediaRecorder.OnInfoListener;
  7. importandroid.os.Bundle;
  8. importandroid.os.Environment;
  9. importandroid.view.MotionEvent;
  10. importandroid.view.SurfaceHolder;
  11. importandroid.view.SurfaceView;
  12. importandroid.view.View;
  13. importandroid.view.ViewGroup;
  14. importandroid.view.Window;
  15. importandroid.view.WindowManager;
  16. importandroid.widget.Button;
  17. importandroid.widget.RelativeLayout;
  18. importandroid.widget.Toast;
  19. publicclassRecoderActivityextendsActivity{
  20. //用来显示图片
  21. privateSurfaceViewsurfaceView;
  22. //刻录和停止按钮布局
  23. privateRelativeLayoutbuttonlayout;
  24. //刻录按钮
  25. privateButtonrecoderbutton;
  26. //停止按钮
  27. privateButtonstopbutton;
  28. //媒体刻录对象
  29. privateMediaRecordermediaRecorder;
  30. /**Calledwhentheactivityisfirstcreated.*/
  31. @Override
  32. publicvoidonCreate(BundlesavedInstanceState){
  33. super.onCreate(savedInstanceState);
  34. //窗口特效为无标题
  35. requestWindowFeature(Window.FEATURE_NO_TITLE);
  36. //设置窗口全屏
  37. getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
  38. WindowManager.LayoutParams.FLAG_FULLSCREEN);
  39. //设定屏幕显示为横向
  40. setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
  41. setContentView(R.layout.main);
  42. buttonlayout=(RelativeLayout)this.findViewById(R.id.buttonlayout);
  43. recoderbutton=(Button)this.findViewById(R.id.recoderbutton);
  44. stopbutton=(Button)this.findViewById(R.id.stopbutton);
  45. surfaceView=(SurfaceView)this.findViewById(R.id.surfaceView);
  46. //获取的画面直接输出到屏幕上
  47. surfaceView.getHolder()
  48. .setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
  49. //画面分辨率
  50. surfaceView.getHolder().setFixedSize(176,144);
  51. //保持屏幕高亮
  52. surfaceView.getHolder().setKeepScreenOn(true);
  53. }
  54. //点击刻录按钮处理方法
  55. publicvoidrecoder(Viewv){
  56. try{
  57. //判断是否存在SD卡
  58. if(Environment.getExternalStorageState().equals(
  59. Environment.MEDIA_MOUNTED)){
  60. //将刻录的视频保存到SD卡中
  61. FilevideoFile=newFile(
  62. Environment.getExternalStorageDirectory(),
  63. System.currentTimeMillis()+".3gp");
  64. mediaRecorder=newMediaRecorder();
  65. //设置声音采集来源于麦克风
  66. mediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
  67. //设置视频采集来源于摄像头
  68. mediaRecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);
  69. //设置输出格式为3gp
  70. mediaRecorder
  71. .setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
  72. //设置视频尺寸
  73. mediaRecorder.setVideoSize(surfaceView.getWidth(),
  74. surfaceView.getHeight());
  75. //设置每秒钟捕捉画面个数为5帧
  76. mediaRecorder.setVideoFrameRate(5);
  77. //设置声音编码
  78. mediaRecorder
  79. .setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
  80. //设置视频编码
  81. mediaRecorder.setAudioEncoder(MediaRecorder.VideoEncoder.H264);
  82. //设置视频的最大持续时间
  83. mediaRecorder.setMaxDuration(10000);
  84. mediaRecorder.setOnInfoListener(newOnInfoListener(){
  85. @Override
  86. publicvoidonInfo(MediaRecordermr,intwhat,intextra){
  87. if(what==MediaRecorder.MEDIA_RECORDER_INFO_MAX_DURATION_REACHED){
  88. Toast.makeText(getApplicationContext(),
  89. R.string.maxDuration,Toast.LENGTH_LONG)
  90. .show();
  91. if(mediaRecorder!=null){
  92. mediaRecorder.stop();
  93. mediaRecorder.release();
  94. mediaRecorder=null;
  95. }
  96. }
  97. }
  98. });
  99. //设置刻录的视频保存路径
  100. mediaRecorder.setOutputFile(videoFile.getAbsolutePath());
  101. //设置预览显示
  102. mediaRecorder.setPreviewDisplay(surfaceView.getHolder()
  103. .getSurface());
  104. //预期准备
  105. mediaRecorder.prepare();
  106. //开始刻录
  107. mediaRecorder.start();
  108. }else{
  109. Toast.makeText(getApplicationContext(),R.string.noSDcard,
  110. Toast.LENGTH_LONG).show();
  111. }
  112. }catch(Exceptione){
  113. e.printStackTrace();
  114. }
  115. //刻录按钮不可点击
  116. recoderbutton.setEnabled(false);
  117. //停止按钮可点击
  118. stopbutton.setEnabled(true);
  119. }
  120. //点击停止按钮处理方法
  121. publicvoidstop(Viewv){
  122. //停止刻录,并释放资源
  123. if(mediaRecorder!=null){
  124. mediaRecorder.stop();
  125. mediaRecorder.release();
  126. mediaRecorder=null;
  127. }
  128. //刻录按钮可点击
  129. recoderbutton.setEnabled(true);
  130. //停止按钮不可点击
  131. stopbutton.setEnabled(false);
  132. }
  133. /**当触摸屏幕的时候,将对焦和拍照按钮布局显示出来*/
  134. @Override
  135. publicbooleanonTouchEvent(MotionEventevent){
  136. if(event.getAction()==MotionEvent.ACTION_DOWN){
  137. buttonlayout.setVisibility(ViewGroup.VISIBLE);
  138. returntrue;
  139. }
  140. returnsuper.onTouchEvent(event);
  141. }
  142. }


文件4:该应用的描述文件 ,AndroidManifest.xml

[html] view plain copy
  1. <?xmlversion="1.0"encoding="utf-8"?>
  2. <manifestxmlns:android="http://schemas.android.com/apk/res/android"
  3. package="cn.oyp.recoder"android:versionCode="1"android:versionName="1.0">
  4. <uses-sdkandroid:minSdkVersion="8"/>
  5. <!--摄像头权限-->
  6. <uses-permissionandroid:name="android.permission.CAMERA"/>
  7. <!--录制音频权限-->
  8. <uses-permissionandroid:name="android.permission.RECORD_AUDIO"/>
  9. <!--在SD卡中创建和删除文件权限-->
  10. <uses-permissionandroid:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>
  11. <!--往SD卡中写入数据的权限-->
  12. <uses-permissionandroid:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
  13. <applicationandroid:icon="@drawable/icon"android:label="@string/app_name">
  14. <activityandroid:name=".RecoderActivity"android:label="@string/app_name"
  15. android:screenOrientation="landscape">
  16. <intent-filter>
  17. <actionandroid:name="android.intent.action.MAIN"/>
  18. <categoryandroid:name="android.intent.category.LAUNCHER"/>
  19. </intent-filter>
  20. </activity>
  21. </application>
  22. </manifest>

更多相关文章

  1. Android 监听U盘插入和拔出并获取U盘文件路径
  2. Android 页面或文件或网络请求时的加载动画
  3. android EditText实例 删除按钮 与内容监听
  4. Android 文件管理器
  5. Android 本地文件 调用系统 设置壁纸
  6. Android 4.x上适配设置DialogFragment背景透明--可拓展实现悬浮
  7. android 根据文件的扩展名选择用什么应用程序打开
  8. android将对象写入文件和从文件中读取对象数据
  9. Android中XML文件的序列化生成与解析

随机推荐

  1. Android屏幕适配全攻略(最权威的官方适配
  2. android去掉button默认的点击阴影
  3. Android(安卓)事件分发详解及示例代码
  4. [Android] ubuntu 下不识别 Android(安卓
  5. Android(安卓)Log详解!
  6. View视图——TextView、EditText、Button
  7. android进程间共享简单数据
  8. 在Ubuntu中和Android中添加开机自启动的
  9. Android应用程序防止被LMK干掉
  10. 移动端兼容问题总结(1)