Phonegap NFC不起作用。

3
我按照phonegap-nfc项目页面上的说明安装了nfc插件,用于我的phonegap项目。
应用程序启动时,我确实看到等待NDEF标签警报。然而,当我将NFC卡片轻敲手机时,我只能听到NFC失败的声音(您可以在this video中听到该声音)。我不确定出了什么问题。

代码与上面第一个链接中的说明完全相同。为了简洁起见,我也会在此复制代码:
我的index.js如下:

onDeviceReady: function() {
    app.receivedEvent('deviceready');

    // Read NDEF formatted NFC Tags
    nfc.addNdefListener (
        function (nfcEvent) {
            var tag = nfcEvent.tag,
                ndefMessage = tag.ndefMessage;

            // dump the raw json of the message
            // note: real code will need to decode
            // the payload from each record
            alert(JSON.stringify(ndefMessage));

            // assuming the first record in the message has 
            // a payload that can be converted to a string.
            alert(nfc.bytesToString(ndefMessage[0].payload).substring(3));
        }, 
        function () { // success callback
            alert("Waiting for NDEF tag");
        },
        function (error) { // error callback
            alert("Error adding NDEF listener " + JSON.stringify(error));
        }
    );
},

你确定你的NFC卡实际上是一个NDEF标签而不是其他类型的NFC卡吗? - QuickFix
@QuickFix 我会尝试找出来,但是 NFC 插件不应该支持任何类型的 NFC 标签吗? - Urban
1
NDEF监听器仅支持NDEF标签。对于其他类型的标签,有一个nfc.addTagDiscoveredListener函数,但它只允许检索标签ID。对于更复杂的操作,我不得不从原始插件构建自己的插件。 - QuickFix
@QuickFix 谢谢。我在日志中注意到了这个:分派标签:TAG: Tech [android.nfc.tech.NfcA,android.nfc.tech.MifareUltralight,android.nfc.tech.NdefFormatable] 消息:null - Urban
@QuickFix好的,我开始监听addTagDiscoveredListener事件了,然后获取到了标签ID(这正是我一开始想要的)。非常感谢。 - Urban
1个回答

5
该插件只允许写入/读取NDEF标签,因为这种操作非常容易。
NFC卡可以更加复杂,并且需要遵循特定的结构和加密,具体取决于卡的类型。有时需要向卡发送命令并按照复杂的协议等待响应。
在您的情况下,使用Mifare经典卡,您必须知道一个密钥才能读取数据。
由于这些原因,通用插件无法允许读取任何类型的NFC卡。
chariotsolutions插件允许完全访问NDEF标签,但仅允许您获取其他卡的标签ID(在这种情况下,请改用nfc.addTagDiscoveredListener)。
要执行更具体的操作,可以从此插件开始制作自己的插件。
要检查您拥有哪种卡,可以使用此应用程序
您还可以查看NFC的Google页面以获得更多参考资料,或Motorola的这篇有趣文档

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接