首页 文章

在Ionic中调用Pdf417 phonegap / cordova插件

提问于
浏览
11

我在Ionic应用程序中以演示模式成功调用Pdf417 phonegap/cordova plugin扫描功能时遇到问题 . 我在iOS上使用Ionic View测试插件 .

Here is a linked Github repository包含仅具有一个状态和控制器的应用程序的简化版本 .

不幸的是,当我测试时,我完全不知道为什么这不起作用 . 我在浏览器中收到一条错误,说'cordova未定义',我希望因为cordova插件在浏览器中应该是404,但它在Ionic View中也不起作用 .

在尝试完成这项工作之前,我已经使用'cordova插件添加(pdf417 git repo'的位置)成功安装了该插件 .

任何帮助将不胜感激 . 我没有太多的经验,所以我可能会走错路,如果我是,请提前抱歉 . 任何指导都会有所帮助 . 如果我不清楚任何事情,我会很乐意详述 . 我相信我可能错过了一些必要的信息 .

这是应用程序中的app.js:

angular.module('app', ['ionic'])
/**
* RUN
*/

.run(function($ionicPlatform) {
  $ionicPlatform.ready(function() {
    // Hide the accessory bar by default (remove this to show the accessory bar above the keyboard
    // for form inputs)
    if(window.cordova && window.cordova.plugins.Keyboard) {
      cordova.plugins.Keyboard.hideKeyboardAccessoryBar(true);
    }
    if(window.StatusBar) {
      StatusBar.styleDefault();
    }

  });
})

/**
* CONTROLLERS
*/
//Workflow Controller
.controller('workflowCtrl', ['$scope', '$ionicPlatform', '$ionicPopup',
function($scope, $ionicPlatform, $ionicPopup) {
  $ionicPlatform.ready(function() {
    //***PDF417 SCANNER***
    function hex2a(hex) {
        var str = '';
        for (var i = 0; i < hex.length; i += 2) {
            str += String.fromCharCode(parseInt(hex.substr(i, 2), 16));
        }
        return str;
    }
    var types = ["PDF417", "QR Code"];
    var options = {
        beep : true,  // Beep on
        noDialog : true,
        uncertain : false, //Recommended
        quietZone : false, //Recommended
        highRes : false, //Recommended
        inverseScanning: false,
        frontFace : false
    };
    var licenseiOs = null;
    var licenseAndroid = null;
    $scope.barcodeResult;
    $scope.fields;
    $scope.scan = function() {
      $ionicPopup.alert({
        title:'Scan Button Clicks',
      });
      console.log('Scan Button Clicks');
      cordova.plugins.pdf417Scanner.scan(
        // Register the callback handler
        function callback(scanningResult) {
          // handle cancelled scanning
          if (scanningResult.cancelled == true) {
            console.log('Scanner cancelled');
            $scope.warnings = "Cancelled";
            return;
          }
          // Obtain list of recognizer results
          var resultList = scanningResult.resultList;
          // Iterate through all results
          for (var i = 0; i < resultList.length; i++) {
            // Get individual resilt
            var recognizerResult = resultList[i];
            if (recognizerResult.resultType == "Barcode result") {
              // handle Barcode scanning result
              if (typeof(recognizerResult.raw) != "undefined" && recognizerResult.raw != null) {
                var raw = hex2a(recognizerResult.raw);
              }
              $scope.barcodeResult = {
                "Data": recognizerResult.data,
                "Raw": raw,
                "Type": recognizerResult.type
              };
            } else if (recognizerResult.resultType == "USDL result") {
              // handle USDL parsing result
              var fields = recognizerResult.fields;
              $scope.fields = {
                /** Personal information */
                "USDL version": fields[kPPAamvaVersionNumber],
                "Family name": fields[kPPCustomerFamilyName],
                "First name": fields[kPPCustomerFirstName],
                "Date of birth": fields[kPPDateOfBirth],
                "Sex": fields[kPPSex],
                "Eye color": fields[kPPEyeColor],
                "Height": fields[kPPHeight],
                "Street": fields[kPPAddressStreet],
                "City": fields[kPPAddressCity],
                "Jurisdiction": fields[kPPAddressJurisdictionCode],
                "Postal code": fields[kPPAddressPostalCode],
                /** License information */
                "Issue date": fields[kPPDocumentIssueDate],
                "Expiration date": fields[kPPDocumentExpirationDate],
                "Issuer ID": fields[kPPIssuerIdentificationNumber],
                "Jurisdiction version": fields[kPPJurisdictionVersionNumber],
                "Vehicle class": fields[kPPJurisdictionVehicleClass],
                "Restrictions": fields[kPPJurisdictionRestrictionCodes],
                "Endorsments": fields[kPPJurisdictionEndorsementCodes],
                "Customer ID": fields[kPPCustomerIdNumber]
              };
            }
          }
        },
        // Register the error callback
        function errorHandler(err) {
          console.log("error: " + err);
          $scope.warnings = err;
        },
        types, options, licenseiOs, licenseAndroid
      );
    };
    //***END PDF417 SCANNER***
  });
}])

/**
* ROUTING
*/
.config(function($ionicConfigProvider, $stateProvider, $urlRouterProvider)
{

  $ionicConfigProvider.tabs.position('bottom');
  $ionicConfigProvider.tabs.style('striped');
  $ionicConfigProvider.navBar.alignTitle('center');

  $urlRouterProvider.otherwise('/tab/workflow');

  $stateProvider
  // setup an abstract state for the tabs directive
    .state('tab', {
      url: '/tab',
      abstract: true,
      templateUrl: 'partials/tab.html'
    })
  // Each tab has its own nav history stack:
    .state('tab.workflow', {
      url: '/workflow',
      views: {
        'tab-workflow': {
          templateUrl: 'partials/tab-workflow.html',
          controller: 'workflowCtrl'
        }
      }
    })
});

此外,这是我的系统日志,当我点击按钮启动pdf417与'离子模拟ios'来运行模拟器 .

THREAD WARNING: [‘Pdf416Scanner’] took ’12.760742’ ms.
Plugin should use a background thread.

更新:由于外设在仿真器中不可用,因此会出现此错误,尽管在离子视图(目前使用iOS)中进行测试时仍然没有任何功能 .

1 回答

  • 1

    答案你的问题非常简单:Ionic View只支持有限数量的插件(目前)并且你不在列表中 .

    它起步支持甚至更少,但增加了更多 .

    这是一个相关链接:http://docs.ionic.io/v1.0/docs/view-usage

    我建议通过USB部署到设备 .

相关问题