android cameraview如何实现拍照和录像功能

avatar
作者
筋斗云
阅读量:0

要实现拍照和录像功能,可以使用Android的Camera类和MediaRecorder类来实现。

  1. 首先,在AndroidManifest.xml文件中添加相机和录像权限:
<uses-permission android:name="android.permission.CAMERA" /> <uses-permission android:name="android.permission.RECORD_AUDIO" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 
  1. 在布局文件中添加CameraView:
<FrameLayout     android:id="@+id/camera_preview"     android:layout_width="match_parent"     android:layout_height="match_parent"> </FrameLayout> 
  1. 在Activity中初始化Camera和MediaRecorder对象,并在拍照和录像按钮的点击事件中调用相应的方法:
public class CameraActivity extends Activity {      private Camera mCamera;     private CameraPreview mPreview;     private MediaRecorder mMediaRecorder;      @Override     public void onCreate(Bundle savedInstanceState) {         super.onCreate(savedInstanceState);         setContentView(R.layout.activity_main);                  mCamera = getCameraInstance();         mPreview = new CameraPreview(this, mCamera);                  FrameLayout preview = (FrameLayout) findViewById(R.id.camera_preview);         preview.addView(mPreview);                  Button captureButton = (Button) findViewById(R.id.button_capture);         captureButton.setOnClickListener(             new View.OnClickListener() {                 @Override                 public void onClick(View v) {                     mCamera.takePicture(null, null, mPicture);                 }             }         );          Button recordButton = (Button) findViewById(R.id.button_record);         recordButton.setOnClickListener(             new View.OnClickListener() {                 @Override                 public void onClick(View v) {                     if (isRecording) {                         stopRecording();                     } else {                         startRecording();                     }                 }             }         );     }      private Camera getCameraInstance(){         Camera c = null;         try {             c = Camera.open();         }         catch (Exception e){             Log.e(TAG, "Failed to open camera: " + e.getMessage());         }         return c;     }      private void startRecording(){         mCamera.unlock();          mMediaRecorder = new MediaRecorder();          mMediaRecorder.setCamera(mCamera);         mMediaRecorder.setAudioSource(MediaRecorder.AudioSource.CAMCORDER);         mMediaRecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);         mMediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);         mMediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);         mMediaRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.MPEG_4_SP);         mMediaRecorder.setOutputFile(getOutputMediaFile(MEDIA_TYPE_VIDEO).toString());          mMediaRecorder.setPreviewDisplay(mPreview.getHolder().getSurface());          try {             mMediaRecorder.prepare();             mMediaRecorder.start();         } catch (IOException e) {             Log.e(TAG, "Failed to start recording: " + e.getMessage());         }     }      private void stopRecording(){         mMediaRecorder.stop();         mMediaRecorder.reset();         mMediaRecorder.release();         mMediaRecorder = null;         mCamera.lock();     }      private PictureCallback mPicture = new PictureCallback() {         @Override         public void onPictureTaken(byte[] data, Camera camera) {             //保存拍照图片的逻辑         }     }; } 

在以上代码中,需要自定义CameraPreview类来显示相机预览,具体实现可以参考Android官方文档。同时,需要实现获取输出文件路径的方法getOutputMediaFile()来保存拍照和录像的文件。

广告一刻

为您即时展示最新活动产品广告消息,让您随时掌握产品活动新动态!