4

我正在开发一个需要在安卓手机和 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..

[debug] {sending [50 bytes]} 0xff 0x00 0x00 0x00 0x2d 0x2d 0x8c 0x8c 0x01 0x00 0x00 0x00 0x00 0x00 0x00> 0x40> 0x4010101010X010x0FE 0x0F 0xBBBBBB 0xBA 0xBA 0XBA 0XBA 0XC9 0XC9 0X000BER 0X00 0X00 0BER 0X000BER 0X00 0BBER 0xC9 0x89 0x00 0x00 0x06 0x46 0x66 0x6D 0x01 0x01 >0x10 0x00

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

[调试] {发送 [7 字节]} 0xFF 0x00 0x00 0x00 0x02 0xD4 0x86

[调试] {发送 [26 字节]} 0xFF 0x00 0x00 0x00 0x15 0xD4 0x8E 0x05 0x20 0x06 0x0F 0x63 >0x6F 0x6D 0x2E 0x61 0x6E 0x64 0x72 0x6F 0x706 0x64 0xE 2

在 it.ismb.npp.IsmbNppConnection.transceive(IsmbNppConnection.java:281)

在 it.ismb.npp.IsmbNppConnection.rightProcedureTarget(IsmbNppConnection.java:301)

在 it.ismb.npp.SenderToPhone$ThreadSender.run(SenderToPhone.java:90)

在 it.ismb.npp.SenderToPhone$InitiatorTask.run(SenderToPhone.java:75)

在 java.util.TimerThread.mainLoop(未知来源)

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

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

在 it.ismb.npp.IsmbNppConnection.transceive(IsmbNppConnection.java:281)

在 it.ismb.npp.IsmbNppConnection.rightProcedureTarget(IsmbNppConnection.java:306)

在 it.ismb.npp.SenderToPhone$ThreadSender.run(SenderToPhone.java:90)

在 it.ismb.npp.SenderToPhone$InitiatorTask.run(SenderToPhone.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(未知来源)

在 it.ismb.npp.IsmbNppConnection.transceive(IsmbNppConnection.java:263)

在 it.ismb.npp.IsmbNppConnection.rightProcedureTarget(IsmbNppConnection.java:317)

在 it.ismb.npp.SenderToPhone$ThreadSender.run(SenderToPhone.java:90)

在 it.ismb.npp.SenderToPhone$InitiatorTask.run(SenderToPhone.java:75)

在 java.util.TimerThread.mainLoop(未知来源)

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

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

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

4

3 回答 3

0

试试这个来获得 NfcAdapter

nfcP2PAdapter = NfcAdapter.getDefaultAdapter(recentContext.getApplicationContext());

//recentContext 是活动(this)

它对你有用,它对我有用

于 2013-03-11T10:59:05.807 回答
0

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

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

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

于 2012-10-24T04:42:43.053 回答
0

您所说的错误来自 NppConnection.java 中的收发方法。我建议您先将手机放在阅读器上(让阅读器的 LED 变为绿色),然后再次运行应用程序。看看这是否有效。如果不是,则在收发方法中设置断点并检查 SW1 和 SW2 的值(如果命令成功,则预期 sw1 = 0x90 和 sw2 = 0x00)。如果出现错误,您会得到 sw2 不等于 0x00 或 sw1 = 0x63。

据我了解,即使您使用的是较新版本的 android,并且如果您的任何设备都不支持 snep,它们也会退回到 NPP。

于 2013-05-09T13:51:32.963 回答