#android #delphi #camera #firemonkey
#Android #delphi #камера #firemonkey
Вопрос:
В приложении мне нужно отсканировать штрих-код, затем получить доступ к камере для съемки фотографий с последующим дальнейшим сканированием штрих-кода.
Поэтому я использую как интерфейс TCameraComponent, так и интерфейс IFMXCameraService.
Проблема возникает, как только я запускаю TCameraComponent (для сканирования кода штрих-кода), затем деактивирую его и делаю снимок … когда я возвращаюсь к TCameraComponent, я получаю ошибку: вызванное исключение класса EJNIException с сообщением «java.lang.RuntimeException: ошибка получения параметров (пустые параметры)».
Важное уточнение: если вы сначала получаете фотографию, а затем открываете сканер штрих-кода, ошибки нет. Ошибка появляется, если вы открываете сканер штрих-кода хотя бы один раз, закрываете его, делаете снимок и снова открываете сканер.
Запустите сканер:
if ( Length( AGrantResults ) = 1 ) and ( AGrantResults[ 0 ] = TPermissionStatus.Granted ) then
begin
SetCaptureSetting();
FBuffer.Clear( TAlphaColors.White );
FActive := True;
LabelFPS.Text := 'Start capturing...';
FCamera.Active := True;
StartStopWatch();
lblScanning.Text := 'Scan On';
FaLblScanning.Enabled := True;
end else
Showmessage( '' );
Остановить сканер:
lblScanning.Text := 'Scan Off';
FaLblScanning.Enabled := False;
FActive := False;
DisplaySlowWarning(False);
FCamera.Active := False;
LabelFPS.Text := '';
Сделайте снимок:
var
Params: TParamsPhotoQuery;
Service: IFMXCameraService;
begin
if TPlatformServices.Current.SupportsPlatformService( IFMXCameraService, Service ) then
begin
Params.Editable := False;
Params.NeedSaveToAlbum := False;
Params.RequiredResolution := TSize.Create( 1080, 1920 );
Params.OnDidFinishTaking := DoDidFinish;
Service.TakePhoto( btnTakePhoto, Params );
end else
ShowMessage('This device does not support the camera service');
Я попытался сделать сервис глобальным и использовать Service := nil после съемки, не помогло.
Комментарии:
1. Что делает SetCaptureSetting() и что такое «сканер штрих-кода», о котором вы говорите?
2. Функция SetCaptureSetting () устанавливает FCamera. Capturesettings := CaptureSettings[ CaptureSettingsIndex ]; CaptureSettings: TArray<TVideoCaptureSetting>; Это массив настроек, полученный ранее. Я use:github.com/Spelt/ZXing . Delphi, но я не думаю, что проблема в сканере. Я попытался полностью отключить его, и здесь описана аналогичная проблема с другим сканером, но решение не найдено delphi-developers-archive.blogspot.com/2016/06/hi-guys.html
3. Вы пробовали это: delphiworlds.com/2020/11/native-camera-ios-android
Ответ №1:
Попробуйте добавить свойство перед активацией камеры
CameraComponent.Quality := FMX.Media.TVideoCaptureQuality.MediumQuality;
Комментарии:
1. В конечном итоге это сработало для оригинального плаката?