Mam problem z zadzwonieniem do funkcji skanowania Pdf417 phonegap/cordova plugin w trybie demonstracyjnym w aplikacji jonowej. Testuję wtyczkę z Ionic View na iOS.Wywołanie wtyczki Pdf417 phonegap/cordova w systemie Ionic
Here is a linked Github repository zawierające uproszczoną wersję aplikacji z tylko jednym stanem i kontrolerem.
Niestety jestem całkowicie zdezorientowany, dlaczego to nie działa kiedy testuję to. Pojawia się komunikat "cordova nie jest zdefiniowana" w przeglądarce, której oczekiwałbym, ponieważ wtyczki cordova powinny mieć 404 w przeglądarce, ale nie działa też w Ionic View.
Z powodzeniem zainstalowałem wtyczkę z "cordova plugin add (lokalizacja pdf417 git repo"), zanim spróbuję to zrobić.
Każda pomoc zostanie bardzo doceniona. Nie mam zbyt dużego doświadczenia, więc mogę być na niewłaściwym torze i przepraszam z góry, jeśli tak. W ogóle pomocne byłyby wszelkie wskazówki. Jeśli nie mam nic do powiedzenia, chętnie to rozwiążę. Jestem pewien, że mogłem przegapić jakieś potrzebne informacje.
Oto moje app.js z aplikacji:
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'
}
}
})
});
Również tutaj jest mój dziennik systemu po kliknięciu na przycisk, aby uruchomić PDF417 z „jonowego naśladować iOS”, aby uruchomić symulator.
THREAD WARNING: [‘Pdf416Scanner’] took ’12.760742’ ms.
Plugin should use a background thread.
UPDATE: Oczekuje się, że ten błąd jako urządzenie peryferyjne nie jest dostępny w emulatorze, choć nadal mam żadnej funkcji w trakcie badania w widoku jonowej (obecnie z iOS).
Po prostu próbowałem go użyć i nie miałem problemu. Kiedy używasz Cordova naga, używasz poleceń Cordova, ale jeśli chcesz używać Ionic, lepiej używać tylko poleceń jonowych, aby uniknąć nieoczekiwanych zachowań. Również ta wtyczka ma dziwną strukturę (wtyczka w przykładzie, jest to pierwsza!). –
Dziękujemy za sprawdzenie. Czy powinienem spróbować testować z Xcode zamiast testować w widoku jonowym? Jak dotąd nie reaguje on na żadną reakcję jonową. Ponadto, wiem, że to dość dziwne, aby umieścić wtyczkę w kontrolerze. To naprawdę powinno być w usłudze, ale chciałem zminimalizować zmienne w moim wydaniu, ponieważ jestem już zdezorientowany, dlaczego wtyczka nie reaguje na mnie. – Johnnie
Nie mówiłem o twoim kodzie, ale o wtyczce pdf417;) Zwykle to, co znajduje się w katalogu Pdf417 powinno znajdować się w katalogu głównym wtyczki, więc pozwoliłoby zainstalować go za pomocą prostego 'cordova | ionic plugin add https:// github.com/PDF417/pdf417-phonegap'. W każdym razie, nie ma ogólnych zasad dotyczących miejsca wstrzyknięcia wtyczek. To naprawdę zależy od tego, co robią te usługi. Rzeczywiście w iOS zawsze warto spróbować zbudować pod Xcode, kiedy to nie działa. Tak przynajmniej działa w samej Cordowie. Czy próbowałeś uruchomić bez tej wtyczki? –