android 和 phonegap(Cordova)交互使用Zxing二维码扫描

android方面的配置:配置环境,下载、编译Zxing源码,整合进项目

1、环境下载、安装,编译Zxing源码

下载Zxing源码地址:https://github.com/zxing/zxing

这里写图片描述

其中android文件夹下为一个功能应用,有分享、历史记录;
androidtest文件夹下为一个测试应用,主要是测试android文件夹下的应用的功能;
android-integration文件夹下为一些接口,androidtest主要调用这里面的接口来达到调用android下面的实现;
core文件夹下为核心代码,解析码,生成码等实现都在此;
android-core文件夹下就一个文件,关于camera的设置;

代码已经有了,但是源码中缺少一个jar,包,也就是core-3.2.2-SNAPSHOT.jar这类,需要我们编译;这个时候配置我们的环境:

1.1、安装配置环境

        Ant: http://ant.apache.org/bindownload.cgi
        Maven: http://maven.apache.org/download.cgi

这里写图片描述

下载效果如下图
这里写图片描述

配置的方法就是解压在一个文件夹下;然后在我的电脑中的环境变量path中配置:
Path中配置的路径依据实际情况配置;
这里写图片描述

1.2 、环境安装好后,开始编译

检测环境是否配置好:
ant -version;
mvn -version;
通过CMD进入到“D:\PhoneGapEnvi\zxing-master”的指定目录;
这里写图片描述
然后开始编译;
进入到 zxing-master\android 目录,输入命令:
android update project –path .

编译jar包在 zxing-master\core 目录,输入命令:
mvn -DskipTests -Dgpg.skip=true install
这里写图片描述

编译成功以后如下图很容易发现jar包在
D:\PhoneGapEnvi\zxing-master\core\target 下面的core-3.2.2-SNAPSHOT.jar
这里写图片描述

更加详细的Zxing编译过程:
http://blog.csdn.net/deng0zhaotai/article/details/38046913

1.3、 eclipse引进Zxing项目并且配置运行

这里写图片描述
引进去以后发现项目会报错,主要有几个原因:
1、libs:没有把core\target 下面的core-3.2.2-SNAPSHOT.jar引进;
2、CameraConfigurationUtils:这个类找不到源头,需要配置,文件在 D:\PhoneGapEnvi\zxing-master\android-core目录中,记录文件目录别忘了;

注意:ZXingTestActivity不使用到,可以不用配置;如果要使用,配置的文件在
D:\PhoneGapEnvi\zxing-master\android-integration目录中,复制进去即可;

整个Zxing项目就可以运行起来了。
这里写图片描述

2、将运行好的项目移植进ionic跨平台项目中

需要运动的东西有的多,注意移植,主要有如下红线部分:
这里写图片描述这里写图片描述

这里写图片描述
还有特别重要的权限文件 AndroidManifest.xml 配置;
移植好了以后项目一大半已经完成了;

cordova 插件、ionic 、android整合

3、cordova 中安装配置phonegap-plugin-barcodescanner插件

进入ng-Cordova中查询插件的路径:
http://ngcordova.com/docs/plugins/barcodeScanner/
这里写图片描述
上面两处标记其中一处是安装插件的路径;另一处是指使用的方法;
进入到cordova 的项目中配置插件了;
cordova plugin add https://github.com/phonegap/phonegap-plugin-barcodescanner.git

最后生成的目录有下效果:
这里写图片描述

3.1 项目中的使用

controller中的使用:

angular.module('aftersale.ctrl', [])
  .controller('aftersaleCtrl', function ($scope, $log, $cordovaPreferences,$cordovaBarcodeScanner,ShowFactory) {
        $scope.afterSaleTitle="售后";
        $scope.scanBarcode = function()
        {
        //这里就是调用的方法:$cordovaBarcodeScanner.scan();
          $cordovaBarcodeScanner.scan().then(function(imageData)
          {
            console.log("Barcode Format -> " + imageData.text);
            console.log("Barcode Format -> " + imageData.format);
            console.log("Cancelled -> " + imageData.cancelled);
          }, function(error) {
            console.log("An error happened -> " + error);
          });
        };
  });

android 方面的:
com.phonegap.plugins.barcodescanner.BarcodeScanner中

    @Override
    public boolean execute(String action, JSONArray args, CallbackContext callbackContext) {
        this.callbackContext = callbackContext;
        this.requestArgs = args;

        if (action.equals(ENCODE))
        {
            Log.i(LOG_TAG, "ENCODE");
            JSONObject obj = args.optJSONObject(0);
            if (obj != null) {
                String type = obj.optString(TYPE);
                String data = obj.optString(DATA);

                // If the type is null then force the type to text
                if (type == null) {
                    type = TEXT_TYPE;
                }

                if (data == null) {
                    callbackContext.error("User did not specify data to encode");
                    return true;
                }

                encode(type, data);
            } else {
                callbackContext.error("User did not specify data to encode");
                return true;
            }
        }
        //会调用这里; 
        else if (action.equals(SCAN)) 
        {
             Log.i(LOG_TAG, "SCAN");
            //android permission auto add
            if(!hasPermisssion()) {
              requestPermissions(0);
            } else {
              scan(args);
            }
        }else {
            return false;
        }
        return true;
    }

如果用户喜欢调用ZXing项目原始的画面,修改如下代码:

//将之前的这个方法的代码注销,写上如下代码,即可调用ZXing原生项目的界面和逻辑;
 public void scan(final JSONArray args) {
      Log.i(LOG_TAG, " public void scan()");
       Intent intent = new Intent();
        intent.setClass(webView.getContext(), CaptureActivity.class);
        this.cordova.getActivity().startActivity(intent);  
  }

以上如有不能理解的地方请留言;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值