Galaxy S3和ACR122之间的P2P NFC通信



我正在研究一个项目,该项目需要在Android手机和PC之间进行NFC通信。我将Galaxy S3用作Android手机,而ACR122用作NFC读者。我在这里和这里尝试了这些应用程序。

我使用了在Android SDK中发现的示例应用程序,通过NFC进行了NDEF消息。

无论我尝试了多少次,我都无法在手机和PC之间建立连接。Android应用程序正常工作,因为它可以通过其他手机推动NDEF消息,但是在与PC连接时,它行不通。当我将手机触摸到读者时,LED上的读者将颜色从红色变为闪烁的绿色和橙色,但没有其他事情发生。

有来自ISMB-NPP-JAVA应用程序的日志输出:

获取工厂

获取终端

终端名称:ACS ACR122 0

t = 1

称为RightProcedureTarget ..

0xbb 0xba 0xa6 0xc9 0x89 0x00 0x00 0x06 0x46 0x66 0x66 0x6d 0x01 0x01> 0x10 0x10 0x00

it.ismb.npp.ismbnppexception:传输数据的问题

[debug] {发送[7个字节]} 0xff 0x00 0x00 0x00 0x02 0xd4 0x86

at.ismb.npp.ismbnppconnection.transceive(ismbnppConnection.java:281)

at.ismb.npp.ismbnppconnection.rightproceduretarget(ismbnppConnection.java:301)

at.ismb.npp.sendertophone $ threadSender.run(sendertertophone.java:90)

at.ismb.npp.sendertophone $ initiatortask.run(sendertertophone.java:75)

在java.util.timerthread.mainloop(未知来源)

在java.util.timerthread.run(未知来源)

it.ismb.npp.ismbnppexception:传输数据的问题

at.ismb.npp.ismbnppconnection.transceive(ismbnppConnection.java:281)

at.ismb.npp.ismbnppconnection.rightproceduretarget(ismbnppconnection.java:306)

at.ismb.npp.sendertophone $ threadSender.run(sendertertophone.java:90)

at.ismb.npp.sendertophone $ initiatortask.run(sendertertophone.java:75)

在java.util.timerthread.mainloop(未知来源)

在java.util.timerthread.run(未知来源)

线程" timer-0" java.lang.illegalstateException中的例外:卡已删除

在sun.security.smartcardio.cardimpl.checkstate(未知来源)

在sun.security.smartcardio.channelimpl.Checkclosed(未知来源)

在sun.security.smartcardio.channelimpl.transmit(未知来源)

at.ismb.npp.ismbnppconnection.transceive(ismbnppconnection.java:263)

at.ismb.npp.ismbnppconnection.rightproceduretarget(ismbnppConnection.java:317)

at.ismb.npp.sendertophone $ threadSender.run(sendertertophone.java:90)

at.ismb.npp.sendertophone $ initiatortask.run(sendertertophone.java:75)

在java.util.timerthread.mainloop(未知来源)

在java.util.timerthread.run(未知来源)

我已经使用了我可以找到的所有驱动程序(包括最新的驱动程序),但问题仍然存在。

设备可能有问题吗?还是我在这里错过了什么?

您正在运行什么版本的Android?NPP仅适用于Android的较旧版本(我相信Pre IC)。

对于ICS和Jellybean,请尝试使用SNEP协议。您正在使用的项目的作者在这里有一个用于SNEP的版本:

http://code.google.com/p/ismb-snep-java/

尝试以nfcadapter

nfcp2padapter = nfcadapter.getDefaultAdapter(erashContext.getApplicationContext());

//最近的context是活动(this)

它将对您有用,对我有用

您说的错误来自nppconnection.java中的certeceive方法。我建议您首先将手机放在读取器上(让读者的LED转向绿色),然后再次运行应用程序。看看这是否有效。如果不是,请在接收方法中放置一个断点,然后检查SW1和SW2的值(如果命令成功,您会期望SW1 = 0x90和SW2 = 0x00)。如果发生错误,您的SW2不等于0x00或sw1 = 0x63。

从我的理解中,即使您使用的是较新版本的Android,并且您的任何一个设备都不支持SNEP,它们也会落回NPP。

最新更新