Android Camcorder

来源:互联网 发布:怎样申请软件著作权 编辑:程序博客网 时间:2024/06/03 17:02

Manifest :

<manifest xmlns:android="http://schemas.android.com/apk/res/android"    package="com.android.jeanlee.camc"    android:versionCode="1"    android:versionName="1.0" >    <uses-sdk        android:minSdkVersion="8"        android:targetSdkVersion="15" />        <uses-permission android:name="android.permission.CAMERA" />    <uses-permission android:name="android.permission.RECORD_AUDIO" />    <uses-feature android:name="android.hardware.camera" />    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>    <application        android:icon="@drawable/ic_launcher"        android:label="@string/app_name"        android:theme="@style/AppTheme" >        <activity            android:name=".Camc"            android:configChanges="orientation|keyboardHidden"            android:screenOrientation="landscape"            android:label="@string/title_activity_camc" >            <intent-filter>                <action android:name="android.intent.action.MAIN" />                <category android:name="android.intent.category.LAUNCHER" />            </intent-filter>        </activity>    </application></manifest>

Layout :

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:tools="http://schemas.android.com/tools"    android:layout_width="match_parent"    android:layout_height="match_parent" >        <SurfaceView         android:id="@+id/id_surface_view"        android:layout_width="fill_parent"        android:layout_height="wrap_content"/>    <Button        android:id="@+id/id_btn_open_camera"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:layout_below="@id/id_surface_view"        android:text="OpenCam" />            <Button        android:id="@+id/id_btn_start_preview"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:layout_below="@id/id_btn_open_camera"        android:text="StartPrv" />        <Button        android:id="@+id/id_btn_stop_preview"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:layout_below="@id/id_btn_open_camera"        android:layout_toRightOf="@id/id_btn_start_preview"        android:text="StopPrv" />    <Button        android:id="@+id/id_btn_start_rec"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:layout_below="@id/id_btn_open_camera"        android:layout_toRightOf="@id/id_btn_stop_preview"        android:text="StartRec" />        <Button        android:id="@+id/id_btn_stop_rec"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:layout_below="@id/id_btn_open_camera"        android:layout_toRightOf="@id/id_btn_start_rec"        android:text="StopRec" /></RelativeLayout>

Jave Code :

package com.android.jeanlee.camc;import java.io.IOException;import android.media.MediaRecorder;import android.os.Bundle;import android.app.Activity;import android.content.pm.ActivityInfo;import android.hardware.Camera;import android.util.Log;import android.view.Menu;import android.view.SurfaceHolder;import android.view.SurfaceView;import android.view.View;import android.view.View.OnClickListener;import android.view.ViewGroup;import android.view.Window;import android.view.WindowManager;import android.widget.Button;import android.widget.Toast;public class Camc extends Activity {private static final String TAG = "Camc";private SurfaceView mSurfaceView;private SurfaceHolder mSurfaceHolder;private final int LAYOUT_WIDTH = 480;private final int LAYOUT_HEIGHT = 320;private Button mBtnOpenCamera;private Button mBtnStartPreview;private Button mBtnStopPreview;private Button mBtnStartRecord;private Button mBtnStopRecord;private Camera mCamera = null;private MediaRecorder mMediaRecorder;private boolean mBlRecording = false;private boolean mBlPreviewing = false;    @Override    public void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);                //Activity Full screen and no title.        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,  WindowManager.LayoutParams.FLAG_FULLSCREEN);        requestWindowFeature(Window.FEATURE_NO_TITLE);                setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);                setContentView(R.layout.activity_camc);                  Log.e(TAG, "onCreate X");    }@Overrideprotected void onResume() {// TODO Auto-generated method stubsuper.onResume(); //Implements surface view        mSurfaceView = (SurfaceView)findViewById(R.id.id_surface_view);        ViewGroup.LayoutParams lp = mSurfaceView.getLayoutParams();        lp.width = LAYOUT_WIDTH;        lp.height = LAYOUT_HEIGHT;        mSurfaceView.setLayoutParams(lp);        mSurfaceView.getHolder().setFixedSize(LAYOUT_WIDTH, LAYOUT_HEIGHT);        mSurfaceHolder = mSurfaceView.getHolder();        mSurfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);                        mBtnOpenCamera = (Button)findViewById(R.id.id_btn_open_camera);        mBtnStartPreview = (Button)findViewById(R.id.id_btn_start_preview);        mBtnStopPreview = (Button)findViewById(R.id.id_btn_stop_preview);        mBtnStartRecord = (Button)findViewById(R.id.id_btn_start_rec);        mBtnStopRecord = (Button)findViewById(R.id.id_btn_stop_rec);                mBtnOpenCamera.setOnClickListener(new OnClickListener(){public void onClick(View v) {// TODO Auto-generated method stubLog.e(TAG, "Camera.open E");if(mCamera != null) {Log.e(TAG, "Camera already opened, return");return;}mCamera = Camera.open();if(mCamera != null){Toast.makeText(Camc.this, "Camera opened", Toast.LENGTH_SHORT).show();}Log.e(TAG, "Camera.open X");}                });                mBtnStartPreview.setOnClickListener(new OnClickListener(){public void onClick(View v) {// TODO Auto-generated method stubif(mBlPreviewing || mBlRecording) {Log.e(TAG, "preview already started or recording, return");return;}if(mCamera != null){Log.e(TAG, "start preview E");try {mCamera.setPreviewDisplay(mSurfaceHolder);} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}//mCamera.setDisplayOrientation(90);mCamera.startPreview();mBlPreviewing = true;Log.e(TAG, "start preview X");}}                });                mBtnStopPreview.setOnClickListener(new OnClickListener(){public void onClick(View v) {// TODO Auto-generated method stubif( !mBlPreviewing || mBlRecording) {Log.e(TAG, "preview already stoped or recording, return");return;}if(mCamera != null) {mCamera.stopPreview();mBlPreviewing = false;}}                });                mBtnStartRecord.setOnClickListener(new OnClickListener(){public void onClick(View v) {// TODO Auto-generated method stubLog.e(TAG, "start record E");if(mBlRecording == true){Log.e(TAG, "Aleady recording, return");return;}mMediaRecorder = new MediaRecorder();if(mCamera != null) {mCamera.unlock();mMediaRecorder.setCamera(mCamera);}mMediaRecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);mMediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);mMediaRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.H264);//mMediaRecorder.setVideoSize(176, 144);mMediaRecorder.setVideoSize(640, 480);mMediaRecorder.setVideoFrameRate(30);mMediaRecorder.setPreviewDisplay(mSurfaceHolder.getSurface());mMediaRecorder.setOutputFile("/mnt/sdcard/luck.mp4");try {mMediaRecorder.prepare();} catch (IllegalStateException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}mMediaRecorder.start();mBlRecording = true;Log.e(TAG, "start record X");}                });                mBtnStopRecord.setOnClickListener(new OnClickListener(){public void onClick(View v) {// TODO Auto-generated method stubLog.e(TAG, "stop record E");if(mBlRecording == false || mMediaRecorder == null) {Log.e(TAG, "Not recording, return");return;}mMediaRecorder.stop();mMediaRecorder.release();mMediaRecorder = null;mBlRecording = false;mBlPreviewing = true;Log.e(TAG, "stop record X");}                });}@Overrideprotected void onDestroy() {// TODO Auto-generated method stubsuper.onDestroy();Log.e(TAG, "onDestroy");if(mCamera != null){mCamera.release();mCamera = null;}if(mBlRecording == true && mMediaRecorder != null) {mMediaRecorder.stop();}if(mMediaRecorder != null){mMediaRecorder.release();mMediaRecorder=null;}}@Overrideprotected void onPause() {// TODO Auto-generated method stubsuper.onPause();Log.e(TAG, "onPause");if(mCamera != null){mCamera.release();mCamera = null;}if(mBlRecording == true && mMediaRecorder != null) {mMediaRecorder.stop();}if(mMediaRecorder != null){mMediaRecorder.release();mMediaRecorder=null;}}}


原创粉丝点击