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;}}}
- Android Camcorder
- Android Camcorder--Camera clients conflict
- camcorder effect support
- CAMCORDER,拍照后重命名照片为未使用的文件序号,再拍照后内容被覆盖
- CAMCORDER,拍照后重命名照片为未使用的文件序号,再拍照后内容被覆盖
- Android
- android
- Android
- android
- android
- Android
- Android
- android
- android
- android
- Android
- Android
- android!!!
- 仿新浪微博客户端--界面设计(1)
- 【转】阿里云Linux redhat 服务器配置 nginx+ php + zend
- 关于sql的执行计划
- qcow2、raw、vmdk等镜像格式
- hibernate3和hibernate4的实现与区别,求解释
- Android Camcorder
- 送给初入大学的工科男们一篇童话
- 加速度计、螺旋仪
- 图文将sqlserver2000备份还原至sqlserver2005
- 浅谈技术管理(转载,讲的非常不错,技术和产品都值得一看)
- robotium测试时获取Android手机屏幕的分辨率大小
- 取消 nestedlist 点击弹出 detailcard 事件,主要就是把detailcard 设置为null 即可;
- StringUtils工具类的常用方法
- eclipse的task