【问题标题】:P2P NFC Communication Between Galaxy S3 and ACR122Galaxy S3 和 ACR122 之间的 P2P NFC 通信
【发布时间】:2012-10-13 02:20:10
【问题描述】:

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

我使用 android sdk 中的示例应用程序通过 NFC 发送 NDEF 消息。

无论我尝试了多少次,我都无法在手机和电脑之间建立连接。 Android 应用程序工作正常,因为它可以通过其他手机推送 NDEF 消息,但是在与 PC 连接时,它不起作用。当我将手机触碰阅读器时,阅读器上的 LED 会从红色变为闪烁的绿色和橙色,但没有其他反应。

有 ismb-npp-java 应用程序的日志输出:

获取工厂

获取终端

终端名称:ACS ACR122 0

T=1

调用 rightProcedureTarget..

[debug] {sending 0xBB 0xBA 0xA6 0xC9 0x89 0x00 0x00 0x06 0x46 0x66 0x6D 0x01 0x01 >0x10 0x00

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

[DEBUG] {sending [7 bytes]} 0xFF 0x00 0x00 0x00 0x02 0xD4 0x86

[debug] {发送[26字节]} 0xff 0x00 0x00 0x0x15 0xd4 0x8e 0x05 0x20 0x06 0x0f 0x63> 0x6f 0x6d 0x2e 0x61 0x6e 0x64 0x72 0x6f 0x69 0x64 0x2e 0x6e 0x70 0x70

在 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(Unknown Source)

在 sun.security.smartcardio.ChannelImpl.checkClosed(Unknown Source)

在 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(未知来源)

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

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

【问题讨论】:

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


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:

    试试这个来获取 NfcAdapter

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

    //recentContext 是activity(this)

    对你有用,对我有用

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-05-10
        • 2012-06-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多