11

Ich habe Probleme beim erfolgreichen Aufruf der Pdf417 phonegap/cordova plugin Scan-Funktion im Demo-Modus innerhalb einer Ionic-Anwendung. Ich teste das Plugin mit Ionic View auf iOS.Aufruf von Pdf417 Phonegap/Cordova Plugin in Ionic

Here is a linked Github repository enthält eine vereinfachte Version der Anwendung mit nur einem Zustand und Controller.

Leider bin ich völlig verwirrt, warum das nicht funktioniert, wenn ich es teste. Ich bekomme eine Fehlermeldung "Cordova ist nicht definiert" im Browser, die ich erwarten würde, weil cordova plugins im Browser 404 sein sollte, aber es funktioniert auch nicht in Ionic View.

Ich habe das Plugin erfolgreich installiert mit 'Cordova Plugin hinzufügen (Speicherort von pdf417 Git Repo') vor dem Versuch, diese Arbeit zu machen.

Jede Hilfe würde sehr geschätzt werden. Ich habe nicht viel Erfahrung , so dass ich im Allgemeinen auf der falschen Spur sein kann, und Entschuldigung im Voraus, wenn ich bin. Jede Anleitung wäre überhaupt hilfreich. Wenn ich mit irgendetwas unklar bin, werde ich es gerne erläutern. Ich bin mir sicher, dass ich einige benötigte Informationen verpasst habe.

Hier ist meine app.js aus der Anwendung:

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' 
     } 
     } 
    }) 
}); 

Auch hier ist mein Systemprotokoll, wenn ich auf die Schaltfläche klicken pdf417 mit ‚ionischen emulieren ios‘ zu starten den Simulator laufen.

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

UPDATE: Dieser Fehler erwartet wird, wie die periphere im Emulator nicht vorhanden ist, obwohl ich immer noch keine Funktion, wenn sie in ionischer Ansicht Testen (derzeit mit IOS).

+1

Ich habe gerade versucht, es zu benutzen, und ich hatte kein Problem. Wenn Sie Cordova nackt verwenden, verwenden Sie Cordova-Befehle, aber wenn Sie Ionic verwenden möchten, sollten Sie nur ionische Befehle verwenden, um unerwartetes Verhalten zu vermeiden. Auch dieses Plugin ist seltsam strukturiert (ein Plugin in einem Beispiel, das ist eine Premiere!). –

+0

Vielen Dank für das Auschecken. Sollte ich versuchen, mit Xcode zu testen, anstatt in ionischer Ansicht zu testen? Im ionischen Bereich ist es bisher völlig unempfänglich. Außerdem weiß ich, dass es ziemlich komisch ist, das Plugin in den Controller zu stecken. Es sollte wirklich in einem Dienst sein, aber ich wollte die Variablen in meinem Problem minimieren, da ich bereits verwirrt bin, warum das Plugin nicht für mich anspricht. – Johnnie

+0

Ich sprach nicht über Ihren Code, sondern über das pdf417-Plugin;) Normalerweise sollte das, was innerhalb des Pdf417-Verzeichnisses liegt, im Wurzelverzeichnis des Plugins liegen, damit es über ein einfaches 'cordova | ionic-Plugin installiert werden kann https:// github.com/PDF417/pdf417-phonegap'. Wie auch immer, es gibt keine allgemeinen Regeln darüber, wo Sie Ihre Plugins-Dienste einfügen können. Es hängt wirklich davon ab, was diese Dienste leisten. In der Tat ist es unter iOS immer einen Versuch wert, unter Xcode zu bauen, wenn es nicht funktioniert. So funktioniert es zumindest unter Cordova. Hast du versucht, es ohne dieses Plugin auszuführen? –

Antwort

1

Die Antwort auf Ihr Problem ist sehr einfach: Ionic View unterstützt nur eine begrenzte Anzahl von Plugins (im Moment) und Sie sind nicht in der Liste.

Es begann damit, noch weniger zu unterstützen, aber weitere wurden hinzugefügt.

Hier ist ein relevantes Link: http://docs.ionic.io/v1.0/docs/view-usage

ich an ein Gerät über USB bereitstellen würde vorschlagen.

Verwandte Themen