阅读量:0
要实现拍照和录像功能,可以使用Android的Camera类和MediaRecorder类来实现。
- 首先,在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" />
- 在布局文件中添加CameraView:
<FrameLayout android:id="@+id/camera_preview" android:layout_width="match_parent" android:layout_height="match_parent"> </FrameLayout>
- 在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()来保存拍照和录像的文件。