ZXing在Android中使用前置摄像头

8

我正在尝试按照这个教程构建一个二维码阅读器

http://code.tutsplus.com/tutorials/android-sdk-create-a-barcode-reader--mobile-17162

我已经成功地让所有东西都正常运作,唯一需要改变的是我需要使用设备的前置摄像头而不是后置摄像头。在教程中我找不到任何可以更改这个设置的地方。我尝试了this中提供的解决方案,但仍然无法解决问题。
主要问题在于导入库时出现以下错误。
operator is not allowed for source level below 1.7

当我将编译器设置为1.7时,出现以下情况。
Android requires compiler compliance level 5.0 or 6.0. Found '1.7' instead

我在Android方面并不是很熟练,如果问题提得不好请见谅。

那么,有没有办法让我在我的应用程序中使用前置摄像头来使用ZXing?有任何链接吗?

非常感谢。

3个回答

11

源代码使用Java 7。Android不需要Java <=6。您可以看到,项目中提供的构建愉快地将Java 7字节码馈送给dex并生成一个工作的应用程序。我不确定您正在使用哪个工具,建议使用其他方式。也许它已经过时了。

但是您不需要复制和编译项目代码,那为什么需要呢?使用core.jar文件即可。

您不需要任何东西来使用前置摄像头。只需通过Intent调用(https://github.com/zxing/zxing/wiki/Scanning-Via-Intent)并设置额外的SCAN_CAMERA_ID为您想要的相机ID——通常是1表示前置摄像头。

例如:

        intent.putExtra("SCAN_MODE", "QR_CODE_MODE");
        intent.putExtra("SCAN_CAMERA_ID", 1);

我尝试通过将“SCAN_CAMERA_ID”额外设置为1来使用前置摄像头,但条形码扫描应用程序始终使用后置摄像头。是否有特定设备的限制可以使用前置摄像头? - htz
完美,正是我所需要的! - StarWind0
注意,他们没有编写ZXing以像普通库一样使用。您需要使用集成库,该库更多或更少地启动应用程序,或者如果未安装,则启动应用商店。请参阅其androidtest作为示例。虽然与此答案不完全兼容,但最终您将得到类似以下的内容: Intent intent = new Intent("com.google.zxing.client.android.SCAN"); intent.putExtra("SCAN_MODE", "QR_CODE_MODE"); intent.putExtra("SCAN_CAMERA_ID", 1); startActivityForResult(intent, 0); - StarWind0

3
如果您使用IntentIntegrator,可以使用setCameraId()来指定前置摄像头:
IntentIntegrator integrator = new IntentIntegrator(yourActivity);
integrator.setCameraId(1);
integrator.initiateScan();

此外,您需要检查设备是否具有多个相机,然后传递其中一个 android.hardware.camera2 常量:CameraMetadata.LENS_FACING_BACK,CameraMetadata.LENS_FACING_FRONTCameraMetadata.LENS_FACING_EXTERNAL - rexxar

2
在进行了一些搜索后,我找到了如何使用前置摄像头的方法。在com.google.zxing.client.android.camera.CameraConfigurationManager.java中有这段代码。
public void openDriver(SurfaceHolder holder) throws IOException {
Camera theCamera = camera;
if (theCamera == null) {
  theCamera = Camera.open();
  if (theCamera == null) {
    throw new IOException();
  }
  camera = theCamera;
}
theCamera.setPreviewDisplay(holder);

只需将 Camera.open() 更改为 Camera.open(1),这对我很有效。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接