gpt4 book ai didi

java - 实现自定义 NFC 管理器的最简单方法是什么?

转载 作者:行者123 更新时间:2023-12-02 09:20:19 25 4
gpt4 key购买 nike

我正在开发 Android 应用程序,该应用程序需要支持普通 Android 手机和基于 Android 的支付终端上的基本 NFC 操作。这些终端具有用于支付操作的硬件,例如打印账单和读取接触式银行卡。出于安全原因,他们还对固件进行了大量修改,并且不支持标准 Android NFC API。相反,他们的制造商提供了用于与硬件交互的 SDK。

我想要实现自定义 NFC 管理器界面,该界面将根据运行应用程序的设备选择不同的方法来使用 NFC。我唯一需要的是读取 NFC 标签 ID 和 Mifare Classic block 的授权读取。

由于 SDK 没有诸如前台调度和 Tag 类之类的内容,因此我需要执行以下操作:

interface MyNfcManager{
fun startNfc()
fun stopNfc()
}

interace MyNfcListener{
fun onTagIdDiscovered(id: ByteArray)
fun onMifareDataRead(data: ByteArray)
}

除了从头开始编写并且无需深入研究低级库和 native 库之外,还有其他更简单的方法来实现它吗?

我找到了nfc相关的库:
https://github.com/grundid/nfctools
https://github.com/skjolber/external-nfc-api

但我找不到任何可以使用的东西

最佳答案

所以简短的答案是,不太可能有人完成了这种非常定制的工作,最有可能完成它的人是终端制造商,并且由于您没有指定是谁,所以很难如果已完成,请回答。

大多数 NFC 内容都是由标准 Android 上的操作系统处理的,因此您实际上只能将其包装在库中,以简化您想要的 NFC 规范之外的自定义内容。

同样,由于您没有指定 Mifare Classic 的用途,因此不可能说是否有人为此创建了一个库。

因此,根据给定的信息(或缺乏信息),它可以归结为自己处理这些非常自定义的东西,以下是您需要做的最低限度,这不涉及 native 代码和非常低级的硬件东西(您可以使用这些东西)除非你已经root了手机,否则无法在标准Android上执行此操作):-

因此,在标准 Android 中,支持读取 Mifare Classic,但级别相当低(您需要知道要读取哪个 block 以及 block 中数据的格式)

参见https://developer.android.com/reference/android/nfc/tech/MifareClassic

我将尝试识别正在运行的设备以尝试正确的访问方法。

一种识别方法是尝试标准 Android 方法,如果返回 NfcAdapter.getDefaultAdapter(Context)

如果为 NULL,则使用自定义 SDK 命令(因为我不希望自定义硬件不会在 Android 中注册为 NFC_Service)

如果为 NOT NULL,则为 ACTION_TECH_DISCOVERED 创建待处理的 Intent

enableForegroundDispatch 使用此 Intent 在操作系统读取标签时收到通知

然后在onNewIntent方法中:-

检查 MifareClassic 是否是受支持的技术(并非所有硬件都支持 MifareClassic),否则请使用 NfcA

关于java - 实现自定义 NFC 管理器的最简单方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58737446/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com