Galaxy S3和ACR122之间的P2P NFC通信

时间:2012-10-23 07:34:41

标签: java android nfc android-beam nfc-p2p

我正在开发一个需要在Android手机和PC之间进行NFC通信的项目。我使用Galaxy S3作为Android手机,使用ACR122作为NFC读卡器。我在herehere尝试了应用程序。

我使用在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)

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

设备可能有问题吗?或者我在这里遗漏了什么?

3 个答案:

答案 0 :(得分:0)

您运行的是什么版本的Android? NPP仅适用于旧版本的Android(我相信ICS之前的版本)。

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

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

答案 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。