【发布时间】:2017-05-01 21:49:49
【问题描述】:
我在处理真实设备上的相机应用程序时遇到问题。当我在 genymotion 模拟器版本 4.4.2(API 19)上运行我的应用程序时,它工作正常。但是当我在我的真实设备华为 P9 Lite 版本 6(API 23)上运行它时,它崩溃了。以下是 Logcat 上显示的错误:
05-01 23:31:10.963 9308-9308/edu.sfsu.cs.orange.ocr W/CameraBase: An error
occurred while connecting to camera: 0
05-01 23:31:10.963 9308-9308/edu.sfsu.cs.orange.ocr E/Camera-JNI:
android_hardware_Camera_native_setup Error: -1
05-01 23:31:10.963 9308-9308/edu.sfsu.cs.orange.ocr E/Camera: Camera new
cameraInitNormal:-1
在我处理相机对象的班级中,我看到“android.hardware.camera 已弃用” 我想可能是这样,我应该改用“android.hardware.camera2”。但是当我使用了很多相机对象和它的方法时,我的代码将会发生很多变化。这可以避免吗?还是这个问题来自其他事情?
相机的权限已经包含在我的清单中,我在我的构建文件中使用了这个配置:
compileSdkVersion 24
buildToolsVersion '25.0.0'
minSdkVersion 9
targetSdkVersion 24
更新
这就是为什么我认为问题出在已弃用的方法上:
try {
// Open and initialize the camera
cameraManager.openDriver(surfaceHolder);
// Creating the handler starts the preview, which can also throw a RuntimeException.
handler = new CaptureActivityHandler(this, cameraManager, isContinuousModeActive);
} catch (IOException ioe) {
showErrorMessage("Error", "Couldn't initialize camera. Please try restarting device.");
} catch (RuntimeException e) {
// Barcode Scanner has seen crashes in the wild of this variety:
// java.?lang.?RuntimeException: Fail to connect to camera service
showErrorMessage("Error", "Could not initialize camera. Please try restarting device.");
}
当应用程序在我的手机上启动时,它会抛出这个 RuntimeException。
openDrive方法:
public synchronized void openDriver(SurfaceHolder holder) throws IOException {
Camera theCamera = camera;
if (theCamera == null) {
theCamera = Camera.open();
if (theCamera == null) {
throw new IOException();
}
camera = theCamera;
}
camera.setPreviewDisplay(holder);
if (!initialized) {
initialized = true;
configManager.initFromCameraParameters(theCamera);
if (requestedFramingRectWidth > 0 && requestedFramingRectHeight > 0) {
adjustFramingRect(requestedFramingRectWidth, requestedFramingRectHeight);
requestedFramingRectWidth = 0;
requestedFramingRectHeight = 0;
}
}
configManager.setDesiredCameraParameters(theCamera);
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
reverseImage = prefs.getBoolean(PreferencesActivity.KEY_REVERSE_IMAGE, false);
}
有什么想法可以解决这个问题吗?提前致谢
【问题讨论】:
标签: android android-studio ocr