Cordova Barcodescanner - 使用前置摄像头

时间:2014-08-25 14:33:23

标签: javascript android cordova

我在使用Cordova制作的应用中使用此条码扫描器(https://github.com/wildabeast/BarcodeScanner),专门用于在Android设备上使用。

我在JavaScript中设置了以下功能:

$(document).ready(function(){    
    $('#scanner').click( function(){

        console.log('clicked'); //to see if the function is firing      
        cordova.plugins.barcodeScanner.scan(

        function (result) {
          alert("We got a barcode\n" +
                "Result: " + result.text + "\n" +
                "Format: " + result.format + "\n" +
                "Cancelled: " + result.cancelled);
        }, 
        function (error) {
          alert("Scanning failed: " + error);
        }
    );
    });    
});

如为此插件提供的文档中所述。我使用cordova CLI将它添加到我的项目中:

$ cordova add plugin https://github.com/wildabeast/BarcodeScanner.git

当我列出项目的可用插件时,我可以看到它已正确安装。此外,我可以在我的应用程序中使用相机,按钮触发正确的功能,并可以使用后置摄像头扫描没有问题。

有没有办法使用前置摄像头进行扫描?如果它不在插件中,是否有任何方法设置设备使用的默认摄像头,在代码中默认使用前置摄像头?我们正在开发的应用程序只需要专门使用前置摄像头,而不需要背面摄像头。

任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:5)

以下是我们为实现这一目标而采取的所有步骤的细分。来自不同来源的大量投入都归功于这项工作,但大多数投入并没有考虑到我们不是JAVA开发人员,甚至一些最小的JAVA实践对我们来说都是新的甚至是未知的。该解决方案来自Web开发人员的观点。

可在此处找到工作存储库以供使用:https://github.com/wilcovandeijl/camera_app

感谢@Leo的帮助。你的帖子引导我们朝着正确的方向前进,但这里有一个更详细的方法,我们最终采取了这种方法。如果你想在帖子上详细说明一点,我会很感激,如果它与最终有效的解决方案不同。

首先,我们使用CMD命令行将条形码扫描程序插件添加到项目中:

cordova plugin add com.phonegap.plugins.barcodescanner

将目录更改为下载插件默认的LibraryProject文件:

cd <project directory>\plugins\com.phonegap.plugins.barcodescanner\src\android\LibraryProject

在此目录中添加一个名为local.properties的新文件,其中包含SDK的路径,即

sdk.dir=C:\\Users\\QQQ\\Documents\\Android\\adt-bundle-windows-x86_64\\sdk

打开文件

<Project directory>plugins\com.phonegap.plugins.barcodescanner\src\android\LibraryProject\src\com\google\zxing\client\android\camera\open\GingerbreadOpenCameraInterface.java

将第48行编辑为:if (cameraInfo.facing == Camera.CameraInfo.CAMERA_FACING_FRONT)

在CMD将目录更改为:

cd <project directory>\plugins\com.phonegap.plugins.barcodescanner\src\android\LibraryProject

在CMD类型ant release中。这将创建一个可在<project directory > \plugins\com.phonegap.plugins.barcodescanner\src\android\LibraryProject\bin

中找到的classes.jar文件

如果您遇到Unable to resolve target 'android-17'错误,请查看this solution

一个文件夹,删除com.google.zxing.client.android.captureactivity.jar文件,但请记住复制文件名。将classes.jar文件放入此目录(\ plugins \ com.phonegap.plugins.barcodescanner \ src \ android \ LibraryProject)并将其重命名为com.google.zxing.client.android.captureactivity.jar

最后,还将新创建的com.google.zxing.client.android.captureactivity.jar文件复制到<project directory>\platforms\android\libs目录。

您现在可以在CMD中运行命令cordova build android来编译您的APK并在您的设备上运行。

感谢@Leo对此的帮助,我们非常感激。

答案 1 :(得分:0)

我认为没有办法直接选择使用哪种相机 BarcodeScanner插件。我解决这个问题的方法是编辑ZXING 此插件用于扫描功能的库。不幸的是, 安装BarcodeScanner插件时出现的ZXING库已经编译完毕 所以你不能编辑任何文件。

在进行任何更改之前,请备份您的Android项目。 这就是我的应用程序使用前置摄像头的方式:

  1. 您需要做的第一件事是从GitHub(https://github.com/wildabeast/BarcodeScanner)下载BarCodeScanner库,Android ZXING库位于/ src / android / LibraryProject / src目录下。
  2. 接下来,删除您的Android项目正在使用的当前ZXING库,在我的情况下,它位于“Android私有库”下(请注意您的包的名称,因为下一步将需要它)
  3. 然后将您下载的ZXING库复制到项目库中,并确保将其命名为相同 作为您在上一步中删除的那个
  4. 导入库后,您只需要为项目更改一行代码即可使用前置摄像头。该文件位于com.google.zxing.client.android.camera.open包中,在我的例子中,它名为“GingerbreadOpenCameraInterface.java”。第48行附近有一个if语句:

    if(cameraInfo.facing == Camera.CameraInfo.CAMERA_FACING_BACK)

  5. 只需将“CAMERA_FACING_BACK”更改为“CAMERA_FACING_FRONT”,您的应用程序应使用前置 相机默认情况下。

    如果您收到与包含“import com.google.xzing.client.android.R”的行相关的任何错误,只需对其进行评论 out,错误应该消失。