我正在开发一个需要在Android手机和PC之间进行NFC通信的项目。我使用Galaxy S3作为Android手机,使用ACR122作为NFC读卡器。我在here和here尝试了应用程序。
我使用在android sdk中找到的示例应用程序通过NFC发送NDEF消息。
无论我尝试了多少次,我都无法在手机和PC之间建立连接。 Android应用程序工作正常,因为它可以通过其他手机推送NDEF消息,但是当涉及到与PC连接时,它不起作用。当我将手机触摸到阅读器时,阅读器上的颜色从红色变为闪烁的绿色和橙色,但没有其他任何事情发生。
ismb-npp-java应用程序的日志输出:
出厂
获取终端
终端名称:ACS ACR122 0
T = 1
名为rightProcedureTarget ..
[DEBUG] {发送[50字节]} 0xFF 0x00 0x00 0x00 0x2D 0xD4 0x8C 0x01 0x00 0x00 0x00 0x00> 0x00 0x40 0x01 0xFE 0x0F 0xBB 0xBA 0xA6 0xC9 0x89 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00> 0xFF 0xFF 0x01 0xFE 0x0F 0xBB 0xBA 0xA6 0xC9 0x89 0x00 0x00 0x06 0x46 0x66 0x6D 0x01 0x01> 0x10 0x00
it.ismb.npp.IsmbNppException:传输数据的问题
[DEBUG] {发送[7字节]} 0xFF 0x00 0x00 0x00 0x02 0xD4 0x86
[DEBUG] {发送[26字节]} 0xFF 0x00 0x00 0x00 0x15 0xD4 0x8E 0x05 0x20 0x06 0x0F 0x63> 0x6F 0x6D 0x2E 0x61 0x6E 0x64 0x72 0x6F 0x69 0x64 0x2E 0x6E 0x70 0x70
at it.ismb.npp.IsmbNppConnection.transceive(IsmbNppConnection.java:281)
at it.ismb.npp.IsmbNppConnection.rightProcedureTarget(IsmbNppConnection.java:301)
at it.ismb.npp.SenderToPhone $ ThreadSender.run(SenderToPhone.java:90)
at it.ismb.npp.SenderToPhone $ InitiatorTask.run(SenderToPhone.java:75)
at java.util.TimerThread.mainLoop(Unknown Source)
at java.util.TimerThread.run(Unknown Source)
it.ismb.npp.IsmbNppException:传输数据的问题
at it.ismb.npp.IsmbNppConnection.transceive(IsmbNppConnection.java:281)
at it.ismb.npp.IsmbNppConnection.rightProcedureTarget(IsmbNppConnection.java:306)
at it.ismb.npp.SenderToPhone $ ThreadSender.run(SenderToPhone.java:90)
at it.ismb.npp.SenderToPhone $ InitiatorTask.run(SenderToPhone.java:75)
at java.util.TimerThread.mainLoop(Unknown Source)
at java.util.TimerThread.run(Unknown Source)
线程“Timer-0”中的异常java.lang.IllegalStateException:卡已被删除
at sun.security.smartcardio.CardImpl.checkState(Unknown Source)
at sun.security.smartcardio.ChannelImpl.checkClosed(未知来源)
at sun.security.smartcardio.ChannelImpl.transmit(未知来源)
at it.ismb.npp.IsmbNppConnection.transceive(IsmbNppConnection.java:263)
at it.ismb.npp.IsmbNppConnection.rightProcedureTarget(IsmbNppConnection.java:317)
at it.ismb.npp.SenderToPhone $ ThreadSender.run(SenderToPhone.java:90)
at it.ismb.npp.SenderToPhone $ InitiatorTask.run(SenderToPhone.java:75)
at java.util.TimerThread.mainLoop(Unknown Source)
at java.util.TimerThread.run(Unknown Source)
我已经使用了所有可以找到的驱动程序(包括最新的驱动程序),但问题仍然存在。
设备可能有问题吗?或者我在这里遗漏了什么?
答案 0 :(得分:0)
您运行的是什么版本的Android? NPP仅适用于旧版本的Android(我相信ICS之前的版本)。
对于ICS和JellyBean,请尝试使用SNEP协议。您正在使用的项目的作者在这里有一个SNEP版本:
答案 1 :(得分:0)
试试这个来获取NfcAdapter
nfcP2PAdapter = NfcAdapter.getDefaultAdapter(recentContext.getApplicationContext());
// recentContext是活动(this)
这对你有用,对我有用
答案 2 :(得分:0)
您说的错误来自NppConnection.java中的收发方法。我建议您先将手机放在阅读器上(让阅读器的LED变为绿色),然后再次运行应用程序。看看这是否有效。如果没有,在收发方法中放置一个断点并检查SW1和SW2的值(如果命令成功,你会期望sw1 = 0x90和sw2 = 0x00)。如果出现错误,您将获得sw2不等于0x00或sw1 = 0x63。
据我了解,即使您使用的是较新版本的Android,如果您的任何一台设备都不支持snep,它们也会回归到NPP。