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
4

3 回答 3

14

@nikhil:感谢 TCP Echo Server 的链接。运行回声服务器后,我的 OpenNFC 堆栈开始工作。为了让其他用户可以从本练习中受益,这里总结了如何使用 NFC 控制器 (NFCC) 模拟器设置 OpenNFC 堆栈。

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

--需要下载所有3个包

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

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

--start Connection Center(运行“Connection Center.exe”)并将其配置为接受来自其他机器的客户端连接。

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

--start echo server(在端口 7 上),使用 cmd: echotool /p tcp /s 7

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

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

--在IP连接中心输入10.0.2.2

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

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

于 2011-08-04T16:20:56.543 回答
1

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

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

无论如何,在启动 logcat 后,从调试消息中可以清楚地看出模拟器无法连接到连接中心。单击 NFC 切换按钮后会收集以下 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 上应答”。我不确定它是如何完成的以及需要什么。

我建议您在 Windows 主机上尝试相同的设置,这就是我要做的。

于 2011-07-21T20:30:39.343 回答
1

使用新版本的 NFC 核心、SDK、连接中心、NFC 模拟器和 Android 附加组件的新图像是可能的。我已经测试过了,它可以工作......只需查看 Open NFC Project 的页面并下载这些东西的新版本。

于 2011-11-03T13:57:28.040 回答