当前位置:首页 > Java

java 如何实现拍照

2026-03-25 05:41:12Java

使用 Android Camera API 实现拍照

在 Android 应用中实现拍照功能,可以通过 Camera API 或 CameraX 库来完成。以下是两种常见方法的实现步骤。

使用 Camera API

  1. 添加权限AndroidManifest.xml 中添加相机和存储权限:

    <uses-permission android:name="android.permission.CAMERA" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
  2. 检查权限 在 Activity 中动态请求权限:

    if (ContextCompat.checkSelfPermission(this, Manifest.permission.CAMERA) 
     != PackageManager.PERMISSION_GRANTED) {
     ActivityCompat.requestPermissions(this, 
         new String[]{Manifest.permission.CAMERA}, 
         REQUEST_CAMERA_PERMISSION);
    }
  3. 打开相机 使用 Camera.open() 获取相机实例:

    Camera camera = Camera.open();
  4. 设置预览 将相机预览绑定到 SurfaceView

    Camera.Parameters params = camera.getParameters();
    camera.setParameters(params);
    camera.setPreviewDisplay(surfaceHolder);
    camera.startPreview();
  5. 拍照并保存 调用 takePicture() 方法:

    camera.takePicture(null, null, new Camera.PictureCallback() {
     @Override
     public void onPictureTaken(byte[] data, Camera camera) {
         File pictureFile = new File(Environment.getExternalStorageDirectory(), "photo.jpg");
         try {
             FileOutputStream fos = new FileOutputStream(pictureFile);
             fos.write(data);
             fos.close();
         } catch (IOException e) {
             e.printStackTrace();
         }
     }
    });

使用 CameraX 库

  1. 添加依赖build.gradle 中添加 CameraX 依赖:

    implementation "androidx.camera:camera-core:1.0.0"
    implementation "androidx.camera:camera-camera2:1.0.0"
    implementation "androidx.camera:camera-lifecycle:1.0.0"
    implementation "androidx.camera:camera-view:1.0.0"
  2. 配置预览 创建 PreviewView 并绑定生命周期:

    
    PreviewView previewView = findViewById(R.id.previewView);
    ListenableFuture<ProcessCameraProvider> cameraProviderFuture = 
     ProcessCameraProvider.getInstance(this);

cameraProviderFuture.addListener(() -> { try { ProcessCameraProvider cameraProvider = cameraProviderFuture.get(); Preview preview = new Preview.Builder().build(); preview.setSurfaceProvider(previewView.getSurfaceProvider());

    CameraSelector cameraSelector = CameraSelector.DEFAULT_BACK_CAMERA;
    cameraProvider.unbindAll();
    cameraProvider.bindToLifecycle(
        this, cameraSelector, preview);
} catch (Exception e) {
    e.printStackTrace();
}

}, ContextCompat.getMainExecutor(this));

java 如何实现拍照


3. 拍照实现
创建 `ImageCapture` 实例并调用 `takePicture()`:
```java
ImageCapture imageCapture = new ImageCapture.Builder()
    .setCaptureMode(ImageCapture.CAPTURE_MODE_MINIMIZE_LATENCY)
    .build();

cameraProvider.bindToLifecycle(
    this, cameraSelector, preview, imageCapture);

imageCapture.takePicture(
    ContextCompat.getMainExecutor(this),
    new ImageCapture.OnImageCapturedCallback() {
        @Override
        public void onCaptureSuccess(ImageProxy image) {
            // 处理拍照结果
            super.onCaptureSuccess(image);
        }
    });

注意事项

  • 权限处理:Android 6.0 以上需要动态请求权限。
  • 生命周期管理:CameraX 自动处理生命周期,而 Camera API 需手动释放资源。
  • 存储路径:Android 10 及以上版本需使用 MediaStore 保存文件。

以上方法适用于大多数 Android 设备,CameraX 是推荐方案,因其更简洁且兼容性更好。

分享给朋友:

相关文章

vue如何实现mvvm

vue如何实现mvvm

Vue 实现 MVVM 的核心机制 Vue 的 MVVM(Model-View-ViewModel)实现依赖于数据绑定和响应式系统,通过以下核心机制完成: 数据劫持(响应式系统) Vue 使用 Ob…

vue如何实现注册

vue如何实现注册

Vue 注册功能实现步骤 注册功能通常涉及前端表单、数据验证、与后端API交互等环节。以下是基于Vue 3和Element Plus的典型实现方式: 表单设计与数据绑定 使用Vue的v-model实…

vue如何实现默认页面

vue如何实现默认页面

Vue 实现默认页面的方法 在 Vue 项目中,通常需要设置一个默认页面(如首页或登录页)作为用户访问时的初始页面。可以通过路由配置实现。 配置路由默认跳转 在 Vue Router 中,使用 re…

如何实现vue

如何实现vue

安装 Vue.js 使用 npm 或 yarn 安装 Vue.js。确保已安装 Node.js 环境。 npm install vue # 或 yarn add vue 创建 Vue 实例 在 HT…

java如何上传文件

java如何上传文件

使用HttpURLConnection上传文件 在Java中,可以通过HttpURLConnection实现文件上传功能。需要设置请求头为multipart/form-data,并构建包含文件数据的请…

java如何创建包

java如何创建包

创建Java包的步骤 在Java中,包(package)用于组织和管理类文件,避免命名冲突。以下是创建Java包的详细方法: 定义包名 在Java源文件的开头使用package关键字声明包名。包名…