【发布时间】:2012-03-20 00:09:34
【问题描述】:
昨天我看了 Google IO Talk about NFC,今天我想用它做一些有趣的事情。
目前我有 Galaxy Nexus (ICS 4.0.2) 和 Nexus S (ICS 4.0.3)。 我已经安装了该演讲的示例应用程序:http://nfc.android.com/StickyNotes.zip
我也在按照这个方法来了解一些 cmets 的流程:http://www.jessechen.net/blog/how-to-nfc-on-the-android-platform/
我想要做的是以 p2p 方式从一部手机向另一部手机发送一条消息并更改 edittext 内容(就像示例必须做的那样!)。
我认为 NFC 消息正在发出,但另一部手机没有接收它... 有人知道为什么吗?
这是其中一部手机的 logcat(当这两部手机相互联系时):
03-03 15:37:47.842: W/NFC-LLC(446): bad LLC length byte d0
03-03 15:37:47.842: W/NFC-LLC(446): bad LLC length byte a6
03-03 15:37:47.842: W/NFC-LLC(446): bad LLC length byte 42
03-03 15:37:47.842: W/NFC-LLC(446): bad LLC length byte 1
03-03 15:37:47.842: W/NFC-LLC(446): bad LLC length byte fc
03-03 15:37:47.842: W/NFC-LLC(446): bad LLC length byte c1
03-03 15:37:48.264: D/NFC JNI(446): Discovered P2P Target
03-03 15:37:48.264: D/NfcService(446): LLCP Activation message
03-03 15:37:48.264: D/NfcService(446): NativeP2pDevice.MODE_P2P_TARGET
03-03 15:37:48.296: I/NFC JNI(446): LLCP Link activated (LTO=150, MIU=128, OPTION=0x00, WKS=0x01)
03-03 15:37:48.296: D/NfcService(446): Initiator Activate LLCP OK
03-03 15:37:48.296: I/NfcP2pLinkManager(446): LLCP activated
03-03 15:37:48.296: D/NfcP2pLinkManager(446): onP2pInRange()
03-03 15:37:48.467: D/dalvikvm(446): GC_FOR_ALLOC freed 3192K, 18% free 17750K/21575K, paused 19ms
03-03 15:37:48.467: I/dalvikvm-heap(446): Grow heap (frag case) to 20.515MB for 3265936-byte allocation
03-03 15:37:48.514: D/dalvikvm(446): GC_CONCURRENT freed <1K, 3% free 20939K/21575K, paused 4ms+3ms
03-03 15:37:51.264: I/NFC JNI(446): LLCP Link deactivated
03-03 15:37:51.264: D/NfcService(446): LLCP Link Deactivated message. Restart polling loop.
03-03 15:37:51.264: D/NfcService(446): disconnecting from target
03-03 15:37:51.264: I/NfcP2pLinkManager(446): LLCP deactivated.
03-03 15:37:52.022: D/NfcP2pLinkManager(446): Debounce timeout
03-03 15:37:52.022: D/NfcP2pLinkManager(446): onP2pOutOfRange()
更新
我对默认便笺代码进行了一些更改,以便将其升级为支持 ICS NFC API。 事实上,如果您查看文档,您可以看到:http://developer.android.com/reference/android/nfc/NfcAdapter.html#enableForegroundNdefPush%28android.app.Activity,%20android.nfc.NdefMessage%29
此方法已弃用。 改用 setNdefPushMessage(NdefMessage, Activity, Activity...)
强烈推荐使用新的setNdefPushMessage(NdefMessage, Activity, Activity...) 代替:它会自动连接到您的 活动生命周期,因此您不需要在您的 onResume/onPause。
我还读到:要使 NDEF 推送正常运行,其他 NFC 设备必须支持 NFC 论坛的 SNEP(简单 Ndef 交换协议)或 Android 的“com.android.npp”(Ndef 推送协议)。这在 Gingerbread 级别的 Android NFC 设备上是可选的,但 SNEP 在 Ice-Cream-Sandwich 及其他设备上是强制性的。
我不明白如果使用 setNdefPushMessage 是否会自动支持 SNEP 协议,如果我必须进行其他更改。 目前,正如我所说,我正在使用 Galaxy Nexus (4.0.2) 和 Nexus S (4.0.3),我没有其他类型的设备可以进行测试。
我还为发送消息的适配器实现了 onNdefPushComplete,并且我看到它从未调用过。我不明白这是否是关于 APIS、设备或我的代码的问题。 所以我不明白的是:如果一切正常,当我更改便笺编辑文本的文本并将两台设备与 NFC 链接时,文本将被发送到另一台设备?就是这个例子吗?
真正奇怪的是,我找不到有关如何使用 ICS 进行 NFC 的示例,而且官方文档也没有很好地解释它......
有人知道怎么解决吗?
【问题讨论】: