开始使用Open NFC仿真器

13

我想开始开发Android的NFC应用程序。最近我开始接触Android,并发现它是一个非常有趣的开发平台。在我购买内置NFC读卡器并购买标签的Android设备之前,我想先了解如何编写代码。

我找到了Open NFC Android模拟器,看起来很符合我的需求。我已经下载了以下内容: 1. Android的Open NFC 2. Open NFC核心版

创建了一个针对Open NFC的avd后,按照说明进行操作。

现在我面临的问题是,在模拟器中,当我转到无线设置并启用NFC时,它显示出现错误。我尝试将IP设置为10.0.2.2还有从ipconfig获取的IP,但都没有成功。我看不到任何日志。 另外我尝试在运行时完全禁用防火墙,以免意外阻止它。

顺便提一下,我想提到我在启动模拟器之前已经启动了连接管理器。

有人有Open NFC for Android的经验吗?如果有人能指向更好的说明集,我会非常感激;或者如果有人能建议另一个模拟器,让我可以尝试一些示例代码并更好地了解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

1
由于您在询问编程工具,因此建议您将此问题发布在[so]上以获得更好的解答。 - ale
@nikhil,你是如何使用Open NFC创建AVD的?我也已经下载了适用于Android的Open NFC。我将其添加为Android SDK文件夹中的附加组件。但之后我不知道该如何在Android Studio中进行更改,以便我可以在我的Android应用程序中使用模拟器。你能帮我解决这个问题吗? - Nagarajan Shanmuganathan
看起来 Open NFC 已经停止了。现在只剩下一个 SourceForge 代码库,而网站 www.open-nfc.org 似乎已经无法访问了。 - Dirk Jäckel
3个回答

14

@nikhil: 感谢提供TCP Echo Server的链接。在运行echo服务器后,我成功让我的OpenNFC堆栈正常工作。为了让其他用户受益,这里总结了设置带有NFC控制器(NFCC)模拟器的OpenNFC堆栈所需做的事情。

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

--需要下载所有3个软件包

  1. OpenNFC Android SDK插件
  2. OpenNFC核心版,其中包含连接中心和NFCC模拟器应用程序。
  3. echo服务器:EchoTool

--安装SDK插件,并使用SDK插件创建AVD。

--启动连接中心(运行“Connection Center.exe”)并配置它以接受来自其他计算机的客户端连接。

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

--使用命令echotool /p tcp /s 7启动echo服务器(在端口7上)。

--使用刚刚创建的AVD启动Android模拟器。

--从模拟器中,选择 设置->无线和网络->NFC设置

--在IP Connection Center中输入10.0.2.2

--选择NFC HAL实现的模拟器

--现在点击NFC切换(复选框)以启动NFC堆栈!


优秀的分步指南。 - nikhil
2
@nikhil:我尝试了示例程序SampleManagerNFC,并尝试读取标签。当程序提示我“展示标签”时,我从NFC控制器模拟器的对象列表中选择了PICOPASS_2K-Tg5_14443B3-R_1虚拟卡。协议指示器(ISO 14443-B-3)确实变成了绿色。LogCat中的消息也表明检测到了标签。然而,接下来却遇到了一个空指针异常。完整日志在http://pastebin.com/CZfsD4wJ上列出。您有没有尝试过这个示例程序和模拟器? - wyt168
如何在Ubuntu上启动NFC模拟器 - Simmant
嗨 @wyt168,你能告诉我如何启动 echotool 吗?我没有很理解这一行。使用以下命令开启 echo 服务器(在端口 7 上):echotool /p tcp /s 7 - GreenROBO
请看这个有用的链接:[helpful link] (https://dev59.com/iWbWa4cB1Zd3GeqPcPI9#15137612) 。还有一个问题,将open_nfc添加到sdk - add-on后,在Android Studio的sdk管理器中它并不可见。 - Prabs
显示剩余2条评论

1

我也遇到了类似的问题。原来文档中提到的连接中心是一个Windows应用程序。这是Inside开发人员的说法:“连接中心是以二进制形式发布的Windows工具。您可以在Open NFC的核心版中找到它,以及NFC模拟器。” 我的构建环境(Eclipse)运行在Ubuntu主机上。所以我对这个问题束手无策。你也在Linux主机上吗?

如文档所示,“连接中心”需要运行才能使NFC控制器模拟器正常工作:

“在启动AVD之前,必须启动并配置连接中心以接受来自其他计算机的客户端连接。”

总之,在启动logcat后,从调试消息中清楚地看出模拟器无法连接到连接中心。以下logcat输出是在单击NFC切换按钮后收集的:

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”。我不确定如何操作以及需要什么。
我建议您在Windows主机上尝试相同的设置,这也是我要做的。

我正在使用Windows主机,并最终成功地使其运行起来,这是在向开发人员发送电子邮件解释问题后实现的。 - nikhil

1

通过新版本的NFC Core、SDK、Connection Center、NFC Emulator和Android Add-on的新图像,这是可能的。我已经测试过了,它可以工作...只需查看Open NFC项目页面并下载这些东西的新版本。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接