- 配置依赖项
在app的build.gradle文件中添加以下依赖项:
dependencies {
implementation "androidx.camera:camera-camera2:1.1.0-alpha04"
implementation 'com.google.android.material:material:1.2.0-alpha06'
}
- 声明权限
在AndroidManifest.xml文件中添加以下权限:
- 在布局文件中添加相机预览和ImageView
在布局文件中添加以下代码:
- 初始化相机
在MainActivity onCreate()方法中添加以下代码:
private ListenableFuture cameraProviderFuture;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
cameraProviderFuture = ProcessCameraProvider.getInstance(this);
cameraProviderFuture.addListener(() -> {
try {
// CameraProvider
ProcessCameraProvider cameraProvider = cameraProviderFuture.get();
// Preview
Preview preview = new Preview.Builder().build();
preview.setSurfaceProvider(previewView.createSurfaceProvider());
// ImageCapture
ImageCapture.Builder builder = new ImageCapture.Builder();
ImageCapture imageCapture = builder.build();
// ImageAnalysis
ImageAnalysis.Builder builderImageAnalysis = new ImageAnalysis.Builder();
ImageAnalysis imageAnalysis = builderImageAnalysis.build();
// Select back camera
CameraSelector cameraSelector = new CameraSelector.Builder()
.requireLensFacing(CameraSelector.LENS_FACING_BACK)
.build();
// Attach use cases to the camera with the same lifecycle owner
Camera camera = cameraProvider.bindToLifecycle((LifecycleOwner)this, cameraSelector, preview, imageCapture, imageAnalysis);
} catch (Exception e) {
Log.e(TAG, "Error occurred", e);
}
}, ContextCompat.getMainExecutor(this));
}
- 拍照并显示在ImageView中
在MainActivity中添加以下代码:
private Executor executor = Executors.newSingleThreadExecutor();
private ImageCapture imageCapture = null;
public void takePicture(View view) {
// 设置保存路径
File file = new File