Я создаю приложение, в котором у пользователя есть FAB, чтобы начать запись скрытого изображения с camera2 API
и некоторые другие данные о местоположении - теперь у пользователя есть возможность открыть предварительный просмотр с помощью элемента из ящика навигации.Проблема заключается в том, что если я запускаю скрытую запись через FAB, а затем нажимаю, чтобы открыть предварительный просмотр, вызывается обратный вызов состояния onDisconnected
из CameraDevice
и скрытая запись отключается, поскольку CameraDevice с идентификатором 0 больше не доступен.
Мой код похож на пример Camera2Video
от Google: https://github.com/googlesamples/android-Camera2Video
private CameraDevice mCameraDevice;
private CaptureRequest.Builder mPreviewBuilder;
private CameraCaptureSession mPreviewSession;
/**
* A {@link Semaphore} to prevent the app from exiting before closing the camera.
*/
private Semaphore mCameraOpenCloseLock = new Semaphore(1);
/**
* {@link CameraDevice.StateCallback} is called when {@link CameraDevice} changes its status.
*/
private CameraDevice.StateCallback mStateCallback = new CameraDevice.StateCallback() {
@Override
public void onOpened(@NonNull CameraDevice cameraDevice) {
mCameraDevice = cameraDevice;
Log.d(TAG, "onOpened: ");
File dir = new File(mNextVideoDirPath);
if(dir.mkdirs()) {
startRecordingVideo();
}
else {
Toast.makeText(context,
"Error: Could not start recording. Directory for saved files could not be created", Toast.LENGTH_SHORT).show();
}
mCameraOpenCloseLock.release();
}
@Override
public void onDisconnected(@NonNull CameraDevice cameraDevice) {
mCameraOpenCloseLock.release();
cameraDevice.close();
mCameraDevice = null;
}
@Override
public void onError(@NonNull CameraDevice cameraDevice, int error) {
mCameraOpenCloseLock.release();
cameraDevice.close();
mCameraDevice = null;
}
};
Если я сделаю сначала предварительный просмотр, а затем начну скрытую запись, предварительный просмотр зависнет и начнется скрытая запись.
У меня есть Huawei P30 pro, и я попытался просто изменить идентификатор устройства камеры, но вместо фронтальной камеры происходит сбой.
Так что для некоторых случаев использования, таких как этот, или существует другой подход?разве это невозможно? ИЛИ как я могу предотвратить некоторые отключения?
ОБНОВЛЕНИЕ
Я нашел статью о нескольких потоках изна электронное устройство на среде от разработчиков Android https://medium.com/androiddevelopers/using-multiple-camera-streams-simultaneously-bf9488a29482
Может быть, я могу добавить эти цели, прежде чем делать вещи .. Примерно так: https://gist.github.com/owahltinez/f615e13bfc3497a0bd5d1427eae6c54f#file-using-multiple-camera-streams-01-kt
ОБНОВЛЕНИЕ КОНЕЦ
При необходимости я могу предоставить еще немного кода, но это больше похоже на пример из Google.
Спасибо за ваше время!