Open NFC仿真器入门

我想开始为Android开发NFC应用程序。 我最近开始使用android,并且发现它是一个非常有趣的开发平台。 在我出去投资一款内置NFC阅读器和购买标签的Android设备之前,我想先了解一下如何为他们编写代码。

我发现Open NFC Android模拟器 ,它似乎是我正在寻找。 我已经下载了:1. Android的Open NFC 2. Open NFC核心版

在创build一个用于Open NFC的avd后,我按照说明操作。

现在我面对的问题是,在模拟器,当我去无线设置,然后我启用NFC,它说,有一个错误。 我已经尝试设置IP到10.0.2.2,也是我从IPCONF获得的IP,但无济于事。 没有我能看到的日志。 另外,我试图在运行时完全禁用防火墙,以防止意外阻塞。

作为一个方面说明,我想提一下,我有连接pipe理器启动之前启动模拟器。

有没有人有与Android的Open NFC的经验,如果有人可以指向我一个更好的指令集,我会非常感激如果有人可以build议另一个模拟器,我可以尝试一些示例代码,并更好地了解NFC 。

adb logcat的输出是

W/KeyCharacterMap( 165): No keyboard for id 0 W/KeyCharacterMap( 165): Using default keymap: /system/usr/keychars/qwerty.kcm.bin D/NfcSettings( 165): onPreferenceChange: Setting NFC key: nfc_cc_ip D/NfcSettings( 165): onPreferenceChange: Setting NFC value: 10.0.2.2 D/NfcSettings( 165): onPreferenceChange: Setting System NFC NFC_CC_IP: 10.0.2.2 D/NfcSettings( 165): onPreferenceChange: Setting NFC key: nfc_hal_mode_list D/NfcSettings( 165): onPreferenceChange: Setting NFC value: 1 D/NfcSettings( 165): onPreferenceChange: Setting NFC mPreferenceNfcHalMode: SIMULATOR:1 D/NfcSettings( 165): onPreferenceChange: Setting System NFC NFC_HAL_MODE: 1 W/InputManagerService( 68): Window already focused, ignoring focus gain of: com.android.internal.view.IInputMethodClient$Stub$Proxy@406df430 D/NfcEnabler( 165): Setting NFC enabled state to: true D/OpenNFCService( 250): Enabling NFC. previous =false D/OpenNFCService( 250): mIsNfcEnabled NFC =false D/OpenNFCService( 250): _enable =true D/OpenNFCService( 250): IOpenNFCService:setNFCEnabled(true) D/OpenNFCService( 250): Invalid IP address D/OpenNFCService( 250): can't create configuration ! D/OpenNFCService( 250): updateNfcOnSetting: false D/OpenNFCService( 250): NFC success of _enabletrue) is false D/OpenNFCService( 250): $$$NFC$$$ Will connect ! $$$NFC$$$ W/NfcEnabler( 165): Error setting NFC enabled state to true 

当我将IP更改为使用ipconfig获取的IP时,出现同样的错误。

 D/NfcSettings( 165): onPreferenceChange: Setting NFC key: nfc_cc_ip D/NfcSettings( 165): onPreferenceChange: Setting NFC value: 114.31.179.86 D/NfcSettings( 165): onPreferenceChange: Setting System NFC NFC_CC_IP: 114.31.179.86 D/NfcEnabler( 165): Setting NFC enabled state to: true D/OpenNFCService( 250): Enabling NFC. previous =false D/OpenNFCService( 250): mIsNfcEnabled NFC =false D/OpenNFCService( 250): _enable =true D/OpenNFCService( 250): IOpenNFCService:setNFCEnabled(true) D/OpenNFCService( 250): Invalid IP address D/OpenNFCService( 250): can't create configuration ! D/OpenNFCService( 250): updateNfcOnSetting: false D/OpenNFCService( 250): NFC success of _enabletrue) is false D/OpenNFCService( 250): $$$NFC$$$ Will connect ! $$$NFC$$$ W/NfcEnabler( 165): Error setting NFC enabled state to true 

@nikhil:感谢您的TCP Echo服务器的链接。 运行echo服务器后,我的OpenNFC堆栈工作。 所以其他用户可以从这个练习中受益,下面是使用NFC控制器(NFCC)模拟器设置OpenNFC堆栈的一个总结。

Windows主机上支持堆栈(使用NFCC模拟器),因为连接中心和NFCC模拟器都是Windows应用程序。

– 需要下载所有3个包

  1. OpenNFC Android SDK插件
  2. OpenNFC核心版 ,它具有连接中心和NFCC模拟器应用程序。
  3. 回声服务器: EchoTool

– 安装SDK插件,并使用SDK Addon创build一个AVD。

– 启动连接中心(运行“连接Center.exe”)并将其configuration为接受来自其他机器的客户端连接。

– 启动NFCC模拟器(运行“NfcSimulator.exe”)。

– 使用cmd:echotool / p tcp / s启动回应服务器(在端口7上)7

– 使用刚刚创build的AVD启动Android模拟器。

– 从仿真器中select设置 – >无线和networking – > NFC设置

– 在IP连接中心input10.0.2.2

– 为NFC HAL实施select模拟器

– 点击NFC开关(checkbox)启动NFC堆栈!

我遇到过类似的问题。 原来在文档中提到的连接中心是一个Windows应用程序。 这是来自Inside的开发人员:“连接中心是一个Windows二进制版本的工具,你可以在Open NFC的核心版本中find它,以及NFC模拟器。 我有我的生成环境(Eclipse)在Ubuntu主机上运行。 所以我这个运气不好。 你是否也在Linux主机上?

连接中心需要运行以使NFC控制器模拟器工作,如文档中所示:“在启动AVD之前,必须启动连接中心并将其configuration为接受来自其他机器的客户端连接”。

无论如何,在射击logcat之后,从debugging消息中可以清楚的看到,模拟器无法连接到连接中心。 点击NFC切换button后收集以下logcat输出:

 root@android:/ # logcat D/NfcEnabler( 170): Setting NFC enabled state to: true D/OpenNFCService( 273): Enabling NFC. previous =false D/OpenNFCService( 273): mIsNfcEnabled NFC =false D/OpenNFCService( 273): _enable =true D/OpenNFCService( 273): IOpenNFCService:setNFCEnabled(true) D/NFCService( 273): Java_org_opennfc_service_Interface_OpenNFCServerStart D/NFCService( 273): Java_org_opennfc_service_Interface_OpenNFCServerStart : Simulator has been selected D/Microread( 273): static_nfcc_device_open D/Microread( 273): static_nfcc_device_get_binding E/SIMULATOR( 273): 00071 ERROR HAL : GetNALBinding E/CCCLIENT( 273): static_CCClientCreateSocket / connect() failed 111 E/SIMULATOR( 273): 00072 WARN HAL : =+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+ E/SIMULATOR( 273): E/SIMULATOR( 273): 00073 WARN HAL : CANNOT CONNECT TO THE CONNECTION CENTER. E/SIMULATOR( 273): E/SIMULATOR( 273): 00074 WARN HAL : SYMPTOM: Impossible to connect to the Connection Center E/SIMULATOR( 273): E/SIMULATOR( 273): 00075 WARN HAL : DIAGNOSTIC: Connection Center not started, firewall, ... E/SIMULATOR( 273): Check Connection Center and your network configuration. E/SIMULATOR( 273): D/SIMULATOR( 273): 00076 TRACE HAL : =+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+ D/SIMULATOR( 273): E/SIMULATOR( 273): 00077 ERROR SIM : static_NALBindingCreateFunction: Cannot create the com port E/OPENNFC_SERVER( 273): 00031 ERROR NFC_HAL PNALServiceCreate: Error returned by the initialization of the NFC HAL E/OPENNFC_SERVER( 273): 00032 ERROR EVENT : static_PContextCreate: Cannot create the NFC HAL Service E/OPENNFC_SERVER( 273): 00033 ERROR STARTUP BootNFCC : PDriverCreate() failed E/NFCService( 273): Java_org_opennfc_service_Interface_OpenNFCServerStart: StartNFCC failed E/OpenNFCService( 273): OpenNFCServerStart failed D/OpenNFCService( 273): updateNfcOnSetting: false D/OpenNFCService( 273): NFC success of _enabletrue) is false D/OpenNFCService( 273): $$$NFC$$$ Will connect ! $$$NFC$$$ W/NfcEnabler( 170): Error setting NFC enabled state to true 

开发人员说,为了在Linux主机上工作,“可能需要在机器上连接中心并行设置一个TCP回显服务器,以便在端口7上进行应答”。 我不知道这是如何做的,什么是必需的。

我build议你在Windows主机上尝试相同的设置,这就是我要做的事情。

随着NFC核心,SDK,连接中心,NFC模拟器和Android插件的新形象的新版本是可能的。 我已经过testing,它的工作原理…只是剔除Open NFC项目的页面,并下载这些新的版本。