13

我有一个 android 手机(nexus s,sdk v15),它应该使用标签仿真将字符串发送到在 nfc-reader/writer-mode 下运行的开发板。我知道这不是 android 官方支持的,所以我可以通过直接访问驱动程序来本地完成(?)。

有没有任何人以前做过这个的例子,或者有一个做这个的应用程序(最好是开源的?)

我在谷歌上发现了一些通常建议不要这样做的东西,或者人们谈论它是如何可能的或者他们是如何(非常普遍地)做到这一点的,但我找不到任何代码或准确的建议。

我不想访问安全元素或做任何需要供应商/提供商批准的智能卡内容。我只想转移字符串。我也知道这可以通过 android api 方法通过 p2p 完成,但这不适用于董事会,所以我尝试这种方法。

4

3 回答 3

14

对于运行库存 KitKat 4.4 的设备

借助Android KitKat 4.4,将手机作为 NFC的功能内置于操作系统中,因此您不再需要依赖 Cyanogenmod 或自定义 ROM。它不会让手机本身充当 Mifare Classic 标签,但我在让我的手机与ACR122 阅读器通信方面取得了很好的效果,所以如果你可以在你的设备上获得 4.4,我肯定会推荐这个选项。

如果您想在 4.4 以下运行并愿意使用 Cyanogenmod

可以将应用程序加载到您的设备上,并让它们通过 NFC 很容易地与阅读器通信,但是您必须运行Cyanogenmod,此功能从 CM 9.1 开始提供

想要在 Gingerbread 上运行 (旧答案)

是的,这是可能的,并且已经为 2.3.4 发布了一个补丁来启用它,我将发布一些链接供您阅读。

他们确实需要将 2.3.4 Gingerbread ROM 连同其他一些补丁一起刷新到您的设备以启用卡仿真功能,所以如果您不愿意这样做,那么它们不会有太大用处,但就我而言意识到这是让它工作的唯一方法。我自己并没有实际测试过,但用户评论表明它有效。

这是一个描述整个过程的博客链接:http: //techshek4u.blogspot.co.uk/2012/01/applying-card-emulation-patch-to_03.html

这是原始论坛帖子的链接,其中包含 2.3.4 的补丁以启用它: http:
//forum.xda-developers.com/showthread.php?t=1281946

还有一个链接到各个开发人员试图让它工作的原始讨论,这取决于你对 Android 和 NFC 的技术知识,这可能或多或少有趣:https ://groups.google.com/forum/#!msg/安卓开发者/1fw1qfFqpGc/6dlzvTqExN4J

注意:根据 NFCGuy 的回答,“如果您的手机正在运行 ICS,请不要将手机降级到 GB。您无法将 NFC 固件降级为再次与 GB 兼容,因此如果您使用国标。”

于 2012-05-31T17:35:07.560 回答
2

If you root your device, it is possible to create an app that turns on the card emulation mode. It is not too difficult, see e.g. https://stackoverflow.com/a/10506299/1202968.

However, card emulation is completely handled by the Secure Element. Your app has no access to the data that is being transferred. The only way to get control over that would be to create and install a Java Card applet on the Secure Element. However, to be able to do that you need acces to secret authentication keys that are only known to Google.

PS: Don't bother with downgrading your phone to GB if it is running ICS. You cannot downgrade the NFC firmware to be compatible again with GB, so NFC will simply not work if you flash your device with GB.

于 2012-05-31T21:30:19.930 回答