nOpened(@NonNull CameraDevice camera) {
// 相機打開成功后的回調
}
@Override
public void onDisconnected(@NonNull CameraDevice camera) {
// 相機斷開連接后的回調
}
@Override
public void onError(@NonNull CameraDevice camera, int error) {
// 相機打開失敗后的回調
}
}, null);
“`
步驟三:設置相機參數
通過Camera.Parameters類或CameraCharacteristics類設置相機參數。具體代碼如下:
“`java
// 使用Camera.Parameters類
Camera.Parameters parameters = camera.getParameters();
parameters.setPictureSize(width, height);
parameters.setFocusMode(Camera.Parameters.FOCUS_MODE_AUTO);
camera.setParameters(parameters);
// 使用CameraCharacteristics類
CameraCharacteristics characteristics = cameraManager.getCameraCharacteristics(cameraId);
StreamConfigurationMap map = characteristics.get(CameraCharacteristics.SCALER_STREAM_CONFIGURATION_MAP);
Size[] sizes = map.getOutputSizes(SurfaceTexture.class);
int width = sizes[0].getWidth();
int height = sizes[0].getHeight();
“`
步驟四:預覽和拍照/錄像
通過SurfaceView或TextureView來實現相機預覽,并通過Camera類或Camera2類的方法來拍照或錄像。具體代碼如下:
“`java
// 使用SurfaceView預覽和拍照
SurfaceView surfaceView = findViewById(R.id.surfaceView);
SurfaceHolder surfaceHolder = surfaceView.getHolder();
surfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
surfaceHolder.addCallback(new SurfaceHolder.Callback() {
@Override
public void surfaceCreated(SurfaceHolder holder) {
try {
camera.setPreviewDisplay(holder);
camera.startPreview();
} catch (IOException e) {
e.printStackTrace();
}
}
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
// 預覽尺寸發生改變時的回調
}
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
camera.stopPreview();
camera.release();
}
});
// 使用TextureView預覽和拍照
TextureView textureView = findViewById(R.id.textureView);
textureView.setSurfaceTextureListener(new TextureView.SurfaceTextureListener() {
@Override
public void onSurfaceTextureAvailable(SurfaceTexture surface, int width, int height) {
try {
Surface s = new Surface(surface);
camera.setPreviewDisplay(s);
camera.startPreview();
} catch (IOException e) {
e.printStackTrace();
}
}
@Override
public void onSurfaceTextureSizeChanged(SurfaceTexture surface, int width, int height) {
// 預覽尺寸發生改變時的回調
}
@Override
public boolean onSurfaceTexAPPtureDestroyed(SurfaceTexture surface) {
camera.stopPreview();
camera.release();
return true;
}
@Override
public void onSurfaceTextureUpdated(SurfaceTexture surface) {
// SurfaceTexture更新時的回調
}
});
“`
通過以上步驟,就可以在app中調用相機參數,并實現拍照、錄像等功能。在實際開發中,可以根據需求進一步調整相機參數,并處理相機的各種回調事件。