Android 相机调用

引言

随着智能手机的普及,相机已经成为了手机的一个重要功能之一。在Android平台上,我们可以通过调用相机来实现拍照、录制视频等功能。本文将介绍在Android中如何调用相机,并提供相应的代码示例。

准备工作

在开始之前,我们需要在AndroidManifest.xml文件中添加相机权限,以确保我们可以访问相机。

<uses-permission android:name="android.permission.CAMERA" />

此外,我们还需要在布局文件中添加一个用于显示相机预览的SurfaceView组件。

<SurfaceView
    android:id="@+id/surfaceView"
    android:layout_width="match_parent"
    android:layout_height="match_parent" />

调用相机

首先,我们需要获取相机的实例。Android提供了Camera类来实现这一功能。我们可以通过以下代码获取相机实例:

private Camera camera;

...

private void openCamera() {
    try {
        camera = Camera.open();
    } catch (Exception e) {
        // 相机打开失败
    }
}

接下来,我们需要将相机与SurfaceView关联起来,实现相机预览的功能。我们可以通过以下代码实现:

private SurfaceView surfaceView;
private SurfaceHolder surfaceHolder;

...

private void setupCameraPreview() {
    surfaceHolder = surfaceView.getHolder();
    surfaceHolder.addCallback(new SurfaceHolder.Callback() {
        @Override
        public void surfaceCreated(SurfaceHolder holder) {
            try {
                camera.setPreviewDisplay(holder);
                camera.startPreview();
            } catch (Exception e) {
                // 相机预览失败
            }
        }

        @Override
        public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
            // 相机预览大小改变时的处理
        }

        @Override
        public void surfaceDestroyed(SurfaceHolder holder) {
            // 释放相机资源
            camera.stopPreview();
            camera.release();
            camera = null;
        }
    });
}

在这段代码中,我们通过SurfaceHolder的回调方法来实现相机预览的初始化、大小改变和销毁的处理。

拍照

要实现拍照功能,我们可以使用Camera类的takePicture()方法。以下是一个简单的示例代码:

private void takePicture() {
    camera.takePicture(null, null, new Camera.PictureCallback() {
        @Override
        public void onPictureTaken(byte[] data, Camera camera) {
            // 处理拍摄的照片数据
        }
    });
}

在上述代码中,我们通过PictureCallback接口来实现对拍摄的照片数据的处理。

录制视频

要实现录制视频功能,我们可以使用MediaRecorder类。以下是一个简单的示例代码:

private MediaRecorder mediaRecorder;

...

private void startRecording() {
    camera.unlock();

    mediaRecorder = new MediaRecorder();
    mediaRecorder.setCamera(camera);
    mediaRecorder.setAudioSource(MediaRecorder.AudioSource.CAMCORDER);
    mediaRecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);
    mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
    mediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
    mediaRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.MPEG_4_SP);
    mediaRecorder.setOutputFile(getOutputMediaFile().toString());

    try {
        mediaRecorder.prepare();
        mediaRecorder.start();
    } catch (IOException e) {
        // 录制视频失败
    }
}

private void stopRecording() {
    mediaRecorder.stop();
    mediaRecorder.release();
    mediaRecorder = null;
    camera.lock();
}

private File getOutputMediaFile() {
    // 创建保存录制视频的文件
}

在上述代码中,我们通过MediaRecorder类来设置录制视频的参数,并通过prepare()和start()方法开始录制,stop()方法停止录制,并释放相关资源。

总结

通过本文的介绍,我们了解了在Android中调用相机的基本过程。我们可以通过获取相机实例、设置相机预览、拍照和录制视频来实现相机功能。希望本文对你学习Android相机调用有所帮助。

引用

  • [Android官方文档 - Camera](
  • [Android官方文档 - MediaRecorder](