Java 实现自定义nfc管理器的最简单方法是什么?

Java 实现自定义nfc管理器的最简单方法是什么?,java,android,nfc,Java,Android,Nfc,我正在开发Android应用程序,它需要在普通Android手机和基于Android的支付终端上支持基本的NFC操作。这些终端具有打印账单和读取联系人银行卡等支付操作的硬件。出于安全原因,他们还对固件进行了大量修改,并且不支持标准的Android NFC api。相反,他们的制造商提供与硬件交互的SDK 我想实现自定义的NFC管理器接口,它将根据运行应用程序的设备选择不同的方法来处理NFC。我唯一需要的是读取NFC标签id和Mifare经典块的授权读取 因为SDK没有前台调度和标签类,所以我需要

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

我想实现自定义的NFC管理器接口,它将根据运行应用程序的设备选择不同的方法来处理NFC。我唯一需要的是读取NFC标签id和Mifare经典块的授权读取

因为SDK没有前台调度和标签类,所以我需要这样做:

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

interace MyNfcListener{
    fun onTagIdDiscovered(id: ByteArray)
    fun onMifareDataRead(data: ByteArray)
}
除了从头开始编写而不深入底层和本机库之外,还有其他更容易实现的方法吗

我找到了与nfc相关的库:


但是我无法从他们那里找到任何有用的东西,所以简单的回答是,不太可能有人做过这种非常定制的工作,最有可能做过这种工作的人是终端制造商,并且由于您没有指定这是谁,因此如果已经做过,很难回答

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

同样,由于您没有指定Mifare Classic的用途,因此无法确定是否有人为此编写了库

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

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

我的方法是尝试识别运行在上面的设备,以尝试正确的访问方法

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

如果为NULL,则使用自定义SDK命令(因为我不希望自定义硬件不注册为Android的NFC_服务)

不为空,然后为发现的
操作\u TECH\u创建挂起的
意图

启用ForegroundDispatch
,以便在操作系统读取标记时收到通知

然后在
onNewIntent
方法中:-


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

好吧,您建议我自己从头开始实施。我在问是否有其他更简单的方法可以做到这一点。由于这是非常定制的东西,您正在尝试,因此不太可能有任何人为此制作了库(终端制造商除外),并且由于您没有指定终端制造商,因此任何人都不可能说“是”它们是该定制api的包装器库。另外,考虑到Android上的正常NFC阅读主要由操作系统处理,将其包装到库中的可能性有限,因此可以添加的最好方法是更好地解析非标准格式。所以我列出了你们需要付出的最小努力。好吧,谢谢你们抽出时间。然而,我将继续讨论这个问题,直到有了具体的解决方案,我最终会把自己变成图书馆。