내 앱에서 qrcode를 감지하기 위해 zxing 라이브러리를 사용하고 싶었습니다. 하지만 애플 리케이션을 보는 목적을 위해, 나는 사용자 정의 디스플레이 방향을 세로로 변경해야했습니다. 따라서 나는 내 애플 리케이션에 전체 zxing 라이브러리를 통합하고 openDriver() 메서드에 camera.setDisplayOrientation (90)을 추가해야했습니다. 이 작업을 수행 한 후 프로그램이 작동하지만 "런타임 예외 : 카메라 서비스에 연결하지 못했습니다"라는 메시지가 임의로 표시됩니다.런타임 오류 : android에서 카메라 서비스에 연결하지 못했습니다.
public void openDriver(SurfaceHolder holder) throws IOException {
if (camera == null) {
camera = Camera.open();
camera.setDisplayOrientation(90);
if (camera == null) {
throw new IOException();
}
}
camera.setPreviewDisplay(holder);
if (!initialized) {
initialized = true;
configManager.initFromCameraParameters(camera);
}
configManager.setDesiredCameraParameters(camera);
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
reverseImage = prefs.getBoolean(PreferencesActivity.KEY_REVERSE_IMAGE, false);
if (prefs.getBoolean(PreferencesActivity.KEY_FRONT_LIGHT, false)) {
FlashlightManager.enableFlashlight();
}
}
public void closeDriver() {
if (camera != null) {
FlashlightManager.disableFlashlight();
camera.release();
camera = null;
framingRect = null;
framingRectInPreview = null;
}
}
/**
* Asks the camera hardware to begin drawing preview frames to the screen.
*/
public void startPreview() {
if (camera != null && !previewing) {
camera.startPreview();
previewing = true;
}
}
/**
* Tells the camera to stop drawing preview frames.
*/
public void stopPreview() {
if (camera != null && previewing) {
if (!useOneShotPreviewCallback) {
camera.setPreviewCallback(null);
}
camera.stopPreview();
previewCallback.setHandler(null, 0);
autoFocusCallback.setHandler(null, 0);
previewing = false;
}
}
답장을 보내 주셔서 감사합니다. 예, 다시 작동하려면 장치를 다시 시작해야합니다. 문제가 계속 발생하면 항상 앱을 종료하고 다시 실행하십시오. 그러나 이것은 매우 무작위로 발생합니다. onPause() 및 onDestroy()에서 카메라를 릴리스하고 있습니다. – bpn
때때로 앱이 때때로 충돌을 일으킨 다음 onPause 또는 onDestroy로 연결되지 않는 것이 확실합니까? onDestory는 호출 할 수 없으며 onPause가 해당 활동에서 캐치되지 않은 예외가 발생하는 경우 건너 뛸 수 있습니다. 어쩌면 일부 로깅을 수행하고 런타임 예외 이전에 정상적으로 종료 된 응용 프로그램을 확인하기 위해 logcat을 사용할 수 있습니까? – mmeyer
네, 저도 해왔습니다. 주요 문제는이 상황이 무작위로 발생하므로 상황을 재현 할 수 없다는 것입니다. 어떤 경우에는 카메라가 출시되는 데 더 오랜 시간이 걸릴 수 있으며 따라서 프로그램이 실행될 때 리소스가 완전히 해제되지 않을 수 있습니까? – bpn