我想开始为Android开发NFC应用程序。我最近开始使用android,我发现它是一个非常有趣的开发平台。在我出去投资购买内置NFC阅读器和购买标签的Android设备之前,我想了解一下如何为他们编写代码。
我找到了Open NFC Android emulator,它似乎正是我正在寻找的。我已下载: 1.适用于Android的Open NFC 2. Open NFC核心版
创建了用于Open NFC的avd后,我按照说明进行操作。
现在我面临的问题是,在模拟器中,当我进入无线设置然后我启用NFC时,它表示存在错误。我已经尝试将IP设置为10.0.2.2以及我从ipconfig获得的IP但无济于事。没有我能看到的日志。 此外,我试图在运行防火墙时完全禁用防火墙,以免意外阻塞。
作为旁注,我想提一下,在启动模拟器之前,我已经启动了Connection Manager。
有没有人有使用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
答案 0 :(得分:13)
@nikhil: 感谢TCP Echo Server的链接。运行echo服务器后,我的OpenNFC堆栈工作正常。因此,其他用户可以从此练习中受益,这里是使用NFC控制器(NFCC)模拟器设置OpenNFC堆栈的操作的摘要。
- 仅限Windows主机支持堆栈(使用NFCC模拟器),因为Connection Center和NFCC模拟器都是Windows应用程序。
- 需要下载所有3个套餐:
- 安装SDK插件,并使用SDK Addon创建AVD。
- 启动Connection Center(运行“Connection Center.exe”)并将其配置为接受来自其他计算机的客户端连接。
- 启动NFCC模拟器(运行“NfcSimulator.exe”)。
- 启动echo服务器(在端口7上),使用cmd:echotool / p tcp / s 7
- 使用刚刚创建的AVD启动Android模拟器。
- 从模拟器中选择设置 - >无线& networks-> NFC设置
- 在IP连接中心输入10.0.2.2
- 选择用于NFC HAL实施的模拟器
- 现在点击NFC切换(复选框)以启动NFC堆栈!
答案 1 :(得分: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 echo服务器,以便在端口7上应答”。我不确定它是如何完成的以及需要什么。
我建议您在Windows主机上尝试相同的设置,这就是我要做的事情。
答案 2 :(得分:1)
可以使用新版本的NFC Core,SDK,连接中心,NFC模拟器和Android附加组件的新图像。我已经测试过并且有效......只需打开Open NFC Project的页面并下载这些东西的新版本。