试图使用ACR122连接到com.android.npp,但得到错误说[NFCSTATUS_INVALID_STATE]
我一直在使用javax.cardio包来从我的Nexus S通过ACR122U接收NDEF消息。我创建了一个Android Beam应用程序,它发送一个简单的文本“Hello!”当意图过滤NDEF_DISCOVERED标记时。当使用TgGetData(0x86可以)命令我似乎得到:试图使用ACR122连接到com.android.npp,但得到错误说[NFCSTATUS_INVALID_STATE]
NfcP2pLinkManager(7588): Sending ndef via SNEP
NFC JNI(7588): Socket not connected
NFC JNI(7588): LLCP Link deactivated
NFC JNI(7588): LLCP Connect request failed
NfcService(7588): LLCP Link Deactivated message. Restart polling loop.
NFC JNI(7588): phLibNfc_Llcp_Close() returned 0x0001[NFCSTATUS_INVALID_PARAMETER]
NfcP2pLinkManager(7588): Failed to connect over SNEP, trying NPP
NdefPushClient(7588): about to create socket
NfcP2pLinkManager(7588): LLCP deactivated.
NdefPushClient(7588): about to connect to service com.android.npp
NFC JNI(7588): phLibNfc_Llcp_ConnectByUri() returned 0x0011[NFCSTATUS_INVALID_STATE]
NdefPushClient(7588): couldn't send tag
NdefPushClient(7588): exception:
NdefPushClient(7588): java.io.IOException
NdefPushClient(7588): at
com.android.nfc.nxp.NativeLlcpSocket.connectToService(NativeLlcpSocket.java:47)
我下面的ACR122的APDU工作流程基本上是:
1) TgInitAsTarget = 0xD4, 0x8c
2) TgGetData = 0xD4, 0x86
3) TgSetData = 0xD4, 0x85, 0x81
4) TgGetData = 0xD4, 0x86
有谁知道为什么我不能连接到“ com.android.npp“服务的Nexus S?
我发现了为什么我的问题正在发生。一旦我通过TgGetData接收到来自手机的第一组字节,就不需要发送CONNECT APDU。在第一个字节流之后,发送一个CC APDU或一个CONNECTION COMPLETE。对于那些谁需要帮助,APDU的应该是:
1) TgInitAsTarget 0xD4 0x8C
2) TgGetData 0xD4 0x86
3) TgSetData (CC) 0xD4 0x8E - no need to send the service name. Simple the DSAP-CC-SSAP bytes. That's it.
4) TgGetData 0xD4 0x86 - you should get your data in this byte stream.
5) TgRelease 0xD4 0x8E
记住:您必须切换你从手机四周得到您的TgSetData使用DSAP和SSAP。祝你好运!
请参阅this ACP122的核电厂实施如何实现。
这个人有我非常相似的代码。我使用了以下ADPU: (字节)0xd4,(字节)0x8e --- TgSetData (字节)0x05,(字节)0x21,(字节)0x06,(字节)0x0f, (字节)0x63,(字节) 0x6f,(字节)0x6d,(字节)0x2e,(字节)0x61, (字节)0x6e,(字节)0x64,(字节)0x72,(字节)0x6f,(字节)0x69, (字节)0x64,(字节)0x2e,(字节)0x6e,(字节)0x70,(字节)0x70 这连接到服务,我收到ndefmessage,但它仍然没有完成梁。它抛出了一个名为“NdefPushServer:错误格式化的NDEF消息,忽略”的错误 - 一个IOException,我怀疑梁失败了。任何想法为什么? – codedawg82 2012-03-03 21:50:57
难道是你的“你好!”消息未封装在NDEF消息中(即使用文本RTD)? – 2012-03-04 20:03:13
我试图从我的手机收到Hello消息,Android SDK足以提供API转换为NDEF。我已经使用了Nexus的Nexus和其他Nexus,并且信息正确。我想知道是否需要为手机可以连接的ACR本身创建一个com.android.npp服务...我说这是由于以下调试行的唯一原因 - NdefPushClient(7588):about连接到服务com.android.npp – codedawg82 2012-03-05 00:35:08
请你可以复制/粘贴你的通信的所有字节序列?我花了一个星期的时间尝试从我的手机发送一个NDEF消息到我的ACR122U阅读器,但一直不可能:( – OverMind 2017-03-06 14:07:17
@OverMind,因为我从这个项目中移除了,我不再有这些序列了,我会快速浏览我的档案找到它们,当时我正在研究Nexus S,因此这些序列对于您的手机和/或操作系统可能不一定相同。 – codedawg82 2017-03-07 22:15:49