【问题标题】:Camera work on emulator but not on real device相机可以在模拟器上工作,但不能在真实设备上工作
【发布时间】: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


    【解决方案1】:

    一个快速的调试技巧是为 targetSdkVersion 19 编译应用程序。看起来在 API 版本之间,Camera 接口必须贬低一些东西。此外,如果您能够通过串行终端或通过 adb 查看内核日志,那么了解“错误:-1”对硬件意味着什么会很有帮助,即它是否真的到达内核中的相机驱动程序?

    adb root
    adb shell
    #cat /proc/kmsg
    

    【讨论】:

    • 我没有访问权限!当我运行cat /proc/kmsg 时,它说权限被拒绝!因为我刚买了手机,所以我不打算根它。请检查我更新的请求!
    猜你喜欢
    • 2016-05-29
    • 2014-09-03
    • 1970-01-01
    • 1970-01-01
    • 2017-06-08
    • 2020-05-10
    • 1970-01-01
    • 2019-05-09
    • 2017-11-14
    相关资源
    最近更新 更多