现在我的平板电脑有 OS Android 2.3.3 而不是 NFC 手机,所以我需要将外部读卡器连接到平板电脑。请告诉我我应该更喜欢哪个读卡器以及将读卡器连接到平板电脑所需的任何驱动程序。内置的 NFC 库是否支持该阅读器?提前致谢。
8 回答
我找到了答案,ACS现在为他们的读者提供了 android 库和示例应用程序。你可以在这里找到库,这里有一些关于 android 支持的阅读器的信息和视频演示。
唯一的问题是 ACS android 库仅支持 Android 3.1 及更高版本。 希望它会帮助你。
如果你还有问题随时问..
Android 2.3 和 4.0 中内置的 NFC 库仅支持 NXP Semiconductors 的 PN544 NFC 芯片。我认为市场上没有任何读卡器使用它,因为该芯片是专门为移动设备设计的。不过,您也许能够找到支持其他 NFC 芯片的 Android NFC API 的替代实现。
另一个问题可能是您的平板电脑很可能没有安装所需的 NFC 库,包括所需的系统服务 (NfcManager)。毕竟,您的平板电脑不支持 NFC,因此不需要这些软件组件。因此,必须为您的平板电脑创建一个包含这些软件组件的新 ROM 系统映像。
使用许多常见的桌面阅读器之一可能并不可行。创建所有必要的软件以将其集成到 Android 中并不是一项简单的任务。购买带有 NFC 的 Android 手机或等待带有 NFC 的 Android 平板电脑上市可能更容易。
Froyo 2.3(支持 NFC 的最低 SDK 版本)或 Ice Cream Sandwich 4.0 都不兼容多种芯片。
当制造商推出具有不同 NFC 芯片的新手机时,是因为有人创建了使用此类芯片的驱动程序并与 Android 的 NFC 类接口,特别是 NfcManager 类和代表本地 NFC 适配器的 NfcAdapter 类。
最佳情况下,您可以使用 Android NDK 创建低级 C/C++ 类,以某种方式将外部 NFC 读卡器与 Android 进行通信,然后使用 NDK 进行更多自定义编程,以使 SDK 上的 NfcAdapter 检测到它...并且不保证您会成功。
而且...如果您正在考虑访问 http://www.alibaba.com并导入带有 NFC 阅读器的平板电脑,请三思而后行,因为这些可能无法让您完成 NXP Semiconductors 芯片对 Android Beam 所做的所有事情(TM) 例如读/写,并通过 NFC-A、B、F、V 或 ISO-DEP 支持不同的 I/O 操作。
为了你的时间(因为时间是当今任何人最宝贵的资产)。我认为您最好的选择是购买几部 NFC 手机,例如 Galaxy Nexus S、DROID Razr、Xperia S、HTC Incredible 等……这些手机开箱即用,这就是我们正在做的事情。
嘿 sachin,由于您的设备没有 NFC,因此它没有 NFC 无线电,因此无法连接(读取或写入)到 NFC 卡。根据 NFC 库,当您尝试获取 NFCAdapter 时,它将始终返回 null。所以你至少需要一个支持 nfc 的安卓设备来进行任何实验。
在我的项目中,我们使用了 ACR122 智能卡读卡器,它将连接到 pc 而不是 android 设备。这个读卡器用于读取任何 nfc 标签。启用了 nfc 的 android 设备将在卡模拟模式下充当 nfc 标签。
现在是问题“内置 NFC 库是否支持该阅读器”的下一部分。
所以这个读卡器可以读取卡值。
使用 ACS NFC 阅读器可以:
您可以在此处找到库和示例代码的文档。但是,它似乎没有写入数据的选项。如果要写入 NFC 阅读器,请使用传输功能发送字节数组。
private static final byte READ = (byte) 0x30;
private static final byte WRITE = (byte) 0xA2;
这些字节是发送功能的默认读写字节。默认 NFC 协议的完整文档可以在这里找到
例子:
byte[] response = new byte[300];
int responseLength;
try {
responseLength = mReader.transmit(slotNum, command, command.length, response, response.length);
} catch (ReaderException e) {
e.printStackTrace();
return "executeCommand: error: " + e.getMessage();
}
Slotnum 是您要使用的阅读器的编号。如果我是正确的,如果您使用的是一个阅读器/USB 设备,则始终为 0。
示例命令:
new byte[] command {(byte) WRITE, 0x04, 0x06, 0x0a, 0x00, 0x21}
第二个字节是要写入的页面地址。第 4 - 15 页是可写的(第 0 和第 1 页是 id,第 2 页是锁定字节,第 3 页是 OTP。它们都是只读的)。
Read 函数的工作方式与 WRITE 函数相同,仅在数组中发送 3 次 0x00 以获得正确的读取设置:
new byte[] command {(byte) READ, 0x04, 0x00, 0x00, 0x00}
第二个字节是要阅读的页面地址。
该视频是否回答了您的问题: http ://www.youtube.com/watch?v= 6Xe7Ux0cTuI“低成本、简单、无驱动程序 - 用于 Ipad、Android 和 Windows 的 EM4100 或 Mifare RFID 阅读器”
PS:我不为这家公司工作,也从不尝试他们的解决方案。
这是一个很好的话题。我赞同 RacZo 对来自阿里巴巴的平板电脑中的 NFC 库支持的担忧。由于设备中的 NFC 芯片组各不相同,并且有些设备对某些操作的支持不可靠或不支持,因此您需要小心并事先在这些设备上测试您的应用程序。
ACS 阅读器可以是一个具有成本效益的解决方案,并且有一些成熟且支持良好的库和 SDK 支持其与 Android 的集成。ACS 外部阅读器的缺点是电池寿命。因为它垄断了 USB 端口,Android 平板电脑不允许在连接外围设备时通过 USB 端口充电。因此,如果您的应用程序是某种信息亭或自助服务应用程序,这可能是个问题。
这里有一篇很好的帖子,介绍了您在面对这一挑战时的各种选择。如果不了解您的应用程序的更多信息,就很难推荐一种或另一种方式。
在这里回答有点晚了,但我实际上已经尝试实现一个尽可能接近原生 NFC 的外部 NFC 阅读器。
可以添加额外的服务,但是常规的 NFC 初始化(NfcAdapter 等)不会知道这个服务,所以它必须另外初始化。
结果是,从技术上讲,在库存 ROM 上替换或添加内置 NFC 服务是不可能的——以“直接替换的方式”。
重用一些原生 NFC 类,如 Tag 和 IsoDep 是可能的。
但是,作为 NFC 应用程序的开发人员,您确实不希望外部服务提供与内置服务相同的功能。外部阅读器可能具有更多功能,并且您至少想知道阅读器是否已插入。
有关更多信息,请参阅外部 NFC API(注意:它不是完全开源的产品)。