我的Cordova应用程序(适用于Android,使用phonegap-nfc插件)成功接收NFC意图并显示标记的UID,但onConnected
方法未被调用。
这是我的index.js文件:
var app = {
initialize: function() {
this.bindEvents();
},
bindEvents: function() {
document.addEventListener('deviceready', this.onDeviceReady, false);
},
onDeviceReady: function() {
app.receivedEvent('deviceready');
nfc.addTagDiscoveredListener(
app.onNfc,
function () { },
function (reason) { app.showText("Ups: " + reason); }
);
},
onNfc: function (nfcEvent) {
var tag = nfcEvent.tag;
app.showText(JSON.stringify(nfcEvent.tag));
var nfcUid = nfc.bytesToHexString(tag.id);
app.showText(' nfcEvent.tag = ' + nfcUid);
nfc.connect(
app.onConnected, // chipcard connected
function () { app.showText('connection successful'); },
function (reason) { app.showText('connect failed: ' + reason); }
);
},
onConnected: function () {
app.showText('onConnected');
nfc.transceive(
"00A400", // RequestAPDU
function (data) { // ResponseAPDU
app.showText("transceive successful: " + data);
},
function (reason) {
app.showText("transceive failed: " + reason);
}
);
nfc.close(
app.onConnected, // remove hander
function () { app.showTxt('close successful'); },
function (reason) { app.showTxt('close failed: ' + reason); }
);
},
receivedEvent: function(id) {
var parentElement = document.getElementById(id);
var listeningElement = parentElement.querySelector('.listening');
var receivedElement = parentElement.querySelector('.received');
listeningElement.setAttribute('style', 'display:none;');
receivedElement.setAttribute('style', 'display:block;');
console.log('Received Event: ' + id);
},
showText: function(message) {
var label = document.createTextNode(message),
lineBreak = document.createElement("br");
messageDiv.appendChild(lineBreak); // add a line break
messageDiv.appendChild(label); // add the text
}
};
app.initialize();
我注意到日志中出现以下错误:
"未捕获TypeError:对象#没有方法' connect'",来源:file:///android_asset/www/js/index.js(48)
这意味着nfc
没有方法connect()
。为什么?在文档中对此方法进行了描述:https://github.com/jalbersol/phonegap-nfc#nfcconnect
答案 0 :(得分:1)
您似乎使用的是不同版本的phonegap-nfc插件。标准的phonegap-nfc插件(来自Chariot Solutions,你可以在https://github.com/chariotsolutions/phonegap-nfc获得)不支持ISO-DEP通信方法(connect / disconnect / transeive)。如果要使用这些方法,则需要使用https://github.com/jalbersol/phonegap-nfc中插件的修改版本。
答案 1 :(得分:1)
我解决了这个问题。这真的是由于插件的错误版本。要安装正确的插件,您需要添加到EV“C:\ Program Files \ Git \ bin”和“C:\ Program Files \ Git \ cmd”中的路径(当然,必须先安装Git)。然后,您可以使用以下命令添加正确的插件:
$ cordova plugin add https://github.com/jalbersol/phonegap-nfc.git
它帮助了我,现在调用了onConnected方法。