android最简单的录像功能的实现

来源:互联网 发布:核算成本的软件 编辑:程序博客网 时间:2024/04/29 00:44
录像功能的实现:

1.所需要的权限:
  1. <uses-permission android:name="android.permission.CAMERA"/>    <!--摄像头的权限-->
  2.     <uses-permission android:name="android.permission.RECORD_AUDIO"/>    
  3.     <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>   <>
  4.     <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
复制代码

2.xml布局的配置:
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3.     android:layout_width="match_parent"
  4.     android:layout_height="fill_parent" >

  5.    
  6.    <SurfaceView 
  7.        android:layout_width="fill_parent"
  8.        android:layout_height="fill_parent"
  9.        android:id="@+id/surfaceView"
  10.        />
  11.     <RelativeLayout
  12.        android:id="@+id/layout"
  13.        android:layout_width="fill_parent"
  14.        android:layout_height="fill_parent"
  15.        android:visibility="gone" >

  16.        <Button
  17.            android:id="@+id/start"
  18.            android:layout_width="wrap_content"
  19.            android:layout_height="wrap_content"
  20.            android:layout_alignParentBottom="true"
  21.            android:layout_alignParentRight="true"
  22.            android:layout_marginRight="17dp"
  23.            android:text="录像" 
  24.            android:onClick="startVoide"
  25.            android:enabled="true"
  26.            />

  27.        <Button
  28.            android:id="@+id/stop"
  29.            android:layout_width="wrap_content"
  30.            android:layout_height="wrap_content"
  31.            android:layout_alignParentBottom="true"
  32.            android:layout_marginRight="14dp"
  33.            android:layout_toLeftOf="@+id/start"
  34.            android:text="停止" 
  35.            android:onClick="startVoide"
  36.             android:enabled="false"
  37.            />

  38.    </RelativeLayout>

  39. </FrameLayout>
复制代码

3.acativity里面的代码:
  1. package com.example.view_player;

  2. import java.io.File;

  3. import android.hardware.Camera;
  4. import android.media.MediaRecorder;
  5. import android.os.Bundle;
  6. import android.os.Environment;
  7. import android.app.Activity;
  8. import android.view.Menu;
  9. import android.view.MotionEvent;
  10. import android.view.SurfaceHolder;
  11. import android.view.SurfaceHolder.Callback;
  12. import android.view.SurfaceView;
  13. import android.view.View;
  14. import android.view.ViewGroup;
  15. import android.view.Window;
  16. import android.view.WindowManager;
  17. import android.widget.Button;
  18. import android.widget.RelativeLayout;

  19. public class MainActivity extends Activity {

  20.         private SurfaceView surfaceView;   //视频显示区域的声明
  21.         private RelativeLayout layout;   //相对布局的声明
  22.         private Callback callback;   //
  23.         private Camera camera;
  24.         private MediaRecorder mediaRecorder;   //媒体录制
  25.         private Button start;   //按钮
  26.         private Button stop;
  27.         
  28.         @Override
  29.         protected void onCreate(Bundle savedInstanceState) {
  30.                 super.onCreate(savedInstanceState);
  31.                 requestWindowFeature(Window.FEATURE_NO_TITLE);
  32.                 getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, 
  33.                                 WindowManager.LayoutParams.FLAG_FULLSCREEN);
  34.                 
  35.                 setContentView(R.layout.activity_main);
  36.                 
  37.                 start = (Button) this.findViewById(R.id.start);
  38.                 this.stop = (Button) this.findViewById(R.id.stop);
  39.                 
  40.                 layout = (RelativeLayout) this.findViewById(R.id.layout);
  41.                 surfaceView = (SurfaceView) this.findViewById(R.id.surfaceView);
  42.                 callback = new MyCallback();
  43.                 surfaceView.getHolder().addCallback(callback);
  44.         }
  45.         
  46.         private class MyCallback implements Callback   //回调类
  47.         {

  48.                 @Override
  49.                 public void surfaceChanged(SurfaceHolder arg0, int arg1, int arg2,
  50.                                 int arg3) {
  51.                         // TODO Auto-generated method stub
  52.                         
  53.                 }

  54.                 @Override
  55.                 public void surfaceCreated(SurfaceHolder arg0) {   
  56.                         // TODO Auto-generated method stub
  57.                         try
  58.                         {
  59.                                 camera = Camera.open();    //打开摄像
  60.                                 
  61.                                 camera.setPreviewDisplay(surfaceView.getHolder());
  62.                                 camera.startPreview();  //开始预览
  63.                         }catch(Exception e)
  64.                         {
  65.                                 e.printStackTrace();
  66.                         }
  67.                 }

  68.                 @Override
  69.                 public void surfaceDestroyed(SurfaceHolder arg0) {
  70.                         // TODO Auto-generated method stub
  71.                         if(camera != null)
  72.                         {
  73.                                 camera.stopPreview();   //停止预览
  74.                                 camera.release();      //释放资源
  75.                                 camera = null;
  76.                         }
  77.                 }
  78.                 
  79.         }
  80.         
  81.         public void startVoide(View v)
  82.         {
  83.                 switch(v.getId())
  84.                 {
  85.                 case R.id.start:
  86.                         start.setEnabled(false);
  87.                         stop.setEnabled(true);
  88.                         try
  89.                         {
  90.                                 File file = new File(Environment.getExternalStorageDirectory()
  91.                                                 + "/" + System.currentTimeMillis() + ".3gp");
  92.                                 camera.unlock();
  93.                                 mediaRecorder = new MediaRecorder();    //媒体录制对象
  94.                                 mediaRecorder.setCamera(camera);   //设置摄像
  95.                                 mediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);   
  96.                                 mediaRecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);
  97.                                 mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);  //设置输出的文件的格式
  98.                                 mediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);   //设置编码
  99.                                 mediaRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.H264);
  100.                                 mediaRecorder.setOutputFile(file.getAbsolutePath());   //设置输出文件的路径
  101.                                 mediaRecorder.setVideoSize(320, 240);  //设置video的大小
  102.                                 mediaRecorder.setVideoFrameRate(5);   
  103.                                 mediaRecorder.setPreviewDisplay(surfaceView.getHolder().getSurface());
  104.                                 mediaRecorder.prepare();   //缓冲
  105.                                 mediaRecorder.start();   //开始录制
  106.                                 
  107.                         }catch (Exception e) {
  108.                                 // TODO: handle exception
  109.                                 e.printStackTrace();
  110.                         }
  111.                         break;
  112.                 case R.id.stop:
  113.                         start.setEnabled(true);
  114.                         stop.setEnabled(false);
  115.                         if(mediaRecorder != null)
  116.                         {
  117.                                 mediaRecorder.stop();   //停止
  118.                                 mediaRecorder.reset();   //重置
  119.                                 mediaRecorder.release();    //释放资源
  120.                                 camera.lock();
  121.                                 mediaRecorder = null;
  122.                         }
  123.                         break;
  124.                 }
  125.         }

  126.         @Override
  127.         public boolean onTouchEvent(MotionEvent event) {
  128.                 // TODO Auto-generated method stub
  129.                 layout.setVisibility(ViewGroup.VISIBLE);   //当触屏的时候按钮可见
  130.                 return super.onTouchEvent(event);
  131.         }
  132. }
复制代码
0 0
原创粉丝点击