あなたはそれらの設定を行うことをお勧めします2ヶ所があります。
・プレビューを開始する前に、あなたがそれをしたい場合は、より良い場所がcreateCameraPreviewSession内onConfiguredオーバーライドメソッドの内側になります()
private void createCameraPreviewSession() {
try {
SurfaceTexture texture = mTextureView.getSurfaceTexture();
assert texture != null;
// We configure the size of default buffer to be the size of camera preview we want.
texture.setDefaultBufferSize(mPreviewSize.getWidth(), mPreviewSize.getHeight());
// This is the output Surface we need to start preview.
Surface surface = new Surface(texture);
// We set up a CaptureRequest.Builder with the output Surface.
mPreviewRequestBuilder
= mCameraDevice.createCaptureRequest(CameraDevice.TEMPLATE_PREVIEW);
mPreviewRequestBuilder.addTarget(surface);
// Here, we create a CameraCaptureSession for camera preview.
mCameraDevice.createCaptureSession(Arrays.asList(surface, mImageReader.getSurface()),
new CameraCaptureSession.StateCallback() {
@Override
public void onConfigured(@NonNull CameraCaptureSession cameraCaptureSession) {
// The camera is already closed
if (null == mCameraDevice) {
return;
}
// When the session is ready, we start displaying the preview.
mCaptureSession = cameraCaptureSession;
try {
//Place here your custom camera settings
// Start displaying the camera preview.
mPreviewRequest = mPreviewRequestBuilder.build();
mCaptureSession.setRepeatingRequest(mPreviewRequest,
mCaptureCallback, mBackgroundHandler);
} catch (CameraAccessException e) {
e.printStackTrace();
}
}
@Override
public void onConfigureFailed(
@NonNull CameraCaptureSession cameraCaptureSession) {
showToast("Failed");
}
}, null
);
} catch (CameraAccessException e) {
e.printStackTrace();
}
}
・プレビューが開始され、実行時にちょうどあなたのdisableAutomaticsを(呼び出した後に設定を行いたい場合は)UIからか:GoogleのCamera2Basicサンプルで提供Camera2BasicFragmentファイル内のボイド(ライン696どこか他のそれは正常に動作するはずです。新しい古いものを置き換えるためthis other questionへの回答で説明したように、あなたがそのCaptureSession.close()メソッドを呼び出すことによって、古いCaptureSessionを閉じる必要はありません
注意。
は、しかし、私はあなたがあなたの質問
mPreviewRequestBuilder.set(CaptureRequest.SENSOR_EXPOSURE_TIME、1000000L)で行ったように、手動で露出時間値の設定について確認していません。
予期しない結果が生じる可能性があるためです。
mPreviewRequestBuilder.set(CaptureRequestCONTROL_AE_LOCK, true);
あなたはCONTROL_AE_LOCK参照hereを確認することができます。私が知っていることはそうすることが通常推奨され、カメラは、独自で調整した後、AE(自動露出)ロックを呼び出すようにする代わりに好適であるということです。
しかし、あなたのコードが一定の露出時間を必要とする場合、それはうまくいくはずです。