Android 摄像头采集 Demo
在现代移动应用开发中,摄像头的使用频率越来越高。无论是拍照、视频录制还是图像处理,都会涉及到摄像头的操作。本文将探讨如何在 Android 上实现摄像头采集,并提供一个简单的示例。
1. 准备工作
在开始编写代码之前,你需要确保你有以下环境:
- Android Studio
- Android 设备或模拟器
- Android SDK
接下来,我们需要在 build.gradle
文件中添加必要的权限和依赖。
android {
...
compileSdkVersion 31
defaultConfig {
...
minSdkVersion 21
targetSdkVersion 31
}
}
dependencies {
implementation 'androidx.camera:camera-camera2:1.0.1'
implementation 'androidx.camera:camera-lifecycle:1.0.1'
implementation 'androidx.camera:camera-view:1.0.0-alpha29'
}
然后在 AndroidManifest.xml
中请求摄像头权限:
<uses-permission android:name="android.permission.CAMERA"/>
<uses-feature android:name="android.hardware.camera" android:required="true"/>
2. 创建布局文件
我们将创建一个简单的界面,其中包含一个用于显示摄像头预览的 PreviewView
,以及一个按钮用于开始视频录制。
<RelativeLayout xmlns:android="
android:layout_width="match_parent"
android:layout_height="match_parent">
<androidx.camera.view.PreviewView
android:id="@+id/preview_view"
android:layout_width="match_parent"
android:layout_height="match_parent" />
<Button
android:id="@+id/capture_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Capture"
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true" />
</RelativeLayout>
3. 编写代码
在我们的主活动中,我们需要初始化摄像头以及处理按钮的点击事件。
import android.Manifest;
import android.content.pm.PackageManager;
import android.os.Bundle;
import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import androidx.camera.core.CameraSelector;
import androidx.camera.core.CameraX;
import androidx.camera.core.Preview;
import androidx.camera.lifecycle.ProcessCameraProvider;
import androidx.core.app.ActivityCompat;
import androidx.core.content.ContextCompat;
import androidx.camera.view.PreviewView;
public class MainActivity extends AppCompatActivity {
private static final int REQUEST_CAMERA_PERMISSION = 200;
private PreviewView previewView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
previewView = findViewById(R.id.preview_view);
if (ContextCompat.checkSelfPermission(this, Manifest.permission.CAMERA) == PackageManager.PERMISSION_GRANTED) {
startCamera();
} else {
ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.CAMERA}, REQUEST_CAMERA_PERMISSION);
}
}
private void startCamera() {
Preview preview = new Preview.Builder().build();
preview.setSurfaceProvider(previewView.createSurfaceProvider());
CameraSelector cameraSelector = new CameraSelector.Builder()
.requireLensFacing(CameraSelector.LENS_FACING_BACK)
.build();
CameraX.bindToLifecycle(this, cameraSelector, preview);
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
if (requestCode == REQUEST_CAMERA_PERMISSION) {
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
startCamera();
} else {
// Permission denied, show a message to the user
}
}
}
}
代码解析
- 权限请求:我们首先检查是否拥有摄像头权限。如果没有,我们请求权限。
- 启动摄像头:使用 CameraX 启动摄像头并将预览显示在
PreviewView
中。 - 生命周期管理:CameraX 能够与活动的生命周期自动管理,从而简化摄像头的使用。
4. 数据采集与处理
在捕获图像或视频后,我们可以使用图片处理库进行分析,如 OpenCV 或 TensorFlow。此时,你可以考虑数据的可视化。例如,当采集成功时,可以展示一个饼图,以便展示采集成功的比例。
pie
title 摄像头采集状态
"成功": 70
"失败": 30
结论
通过 CameraX,我们可以轻松地实现摄像头的功能,处理图像采集与查看的需求。虽然本文展示了一个简单的例子,实际应用中可以根据需求进行扩展,例如添加图像处理、视频录制等功能。希望通过这个 demo,让大家对 Android 摄像头采集业务有更深入的了解,为后续的开发提供灵感与基础。