【发布时间】:2020-07-01 13:18:30
【问题描述】:
我是 Android 开发的初学者,我正在尝试为 NFC 配置“直通”模式。基本上 I2C 在 NFC TAG 上写入一些内容,手机将其拾取,新数据由 I2C 写入等等。我有点纠结于标签的写入时间:同时,由于收发失败,手机收到“NAK”并返回 IOException。我该如何正确处理它?我尝试使用“thread.millis”等到 I2C 完成,但这个解决方案看起来很糟糕,只适用于我的 arduino 和手机。
while (Schleife < 1000) {
try {
answer = ultralight.transceive(command); //This one throws an IOException if the data is not ready yet
Schleife = Schleife + 1;
} catch (IOException ioe) {
//Log.e("UnsupportedEncoding", ioe.toString());
}
}
我希望程序重新执行该过程。我尝试的一件事是将 catch 语句包含到 while 循环中,但有时重新运行 while 循环需要很长时间。
感谢每一个回答。
亲切的问候
【问题讨论】:
-
听起来您有一些 NFC 芯片,您正试图让它与手机通话。提供有关您正在使用的 NFC 芯片硬件的详细信息以及您如何控制该芯片的代码。我认为您误解了 NFC 的工作原理。 NFC芯片可以在读写器、主机卡仿真和点对点三种主要模式下工作。听起来您正在尝试使用读取器/写入器模式来相互交谈,这是行不通的。您需要读写器才能与真实卡(或主机卡仿真模式下的 NFC 芯片)或两者在点对点模式下(但在 Android 10 中已删除)进行通信
-
感谢您的回复!我正在使用 NXP NFC NTag NT3H1101/NT3H120。它支持所谓的“直通”模式,基本上是I2C在NTAG上写,手机读,I2C再写等等,一切都在瞬间发生。当手机读取 SRAM 时,它会立即尝试再次读取,因为 SRAM 是由 I2C 写入的,所以这不起作用。因此,NFC 芯片返回一个“NAK”,触发我要处理的 IOException。
-
OK 现在我们知道您使用的是哪种芯片更容易理解您有一个双接口 NFC 卡芯片(因此它是 NFC 卡模式的读写器)但是该芯片有一个特殊的模式绕过正常的 EEPROM)。问题是您要收发的
command是什么?在收发级别,NAK 是有效的收发响应,不应是 IO 异常(数据已成功发送和接收)。您还可能想查看android.googlesource.com/platform/frameworks/base/+/refs/heads/… -
我正在尝试收发命令“Fast_Read”,该命令在一个命令中读取 sram 的 64 个字节。它看起来像这样:Command[0] = 0xA0; [1] = 0xF0,[2] = 0xFF。它是一个简单的收发命令。
标签: java android android-studio try-catch nfc