工作 around/quick 修复收发失败错误?

Work around/quick fix for transceive failed error?

这个问题已被问过几次,但仍然没有明确的答案。根据this question, the reason is because of transceive timeout. Some developers filed an issue,但我没有看到任何答案清除线程上的解决方案。

我正在尝试使用 MifareUltralight class 在 NTAG216 中写入。我正在使用 writePage 方法,这就是错误发生的地方。

这是错误报告的一部分:

Error: java.io.IOException: Transceive failed at     
android.nfc.TransceiveResult.getResponseOrThrow(TransceiveResult.java:52) 
at android.nfc.tech.BasicTagTechnology.transceive(BasicTagTechnology.java:173)

到目前为止我尝试过的:

  1. 增加超时
  2. 使用带有写入命令的收发器手动写入

测试写入标签的设备有效:

  1. 三星galaxy note 3(SM-N900L)。 android 版本 4.3
  2. 一些本地制造商的 phone。 android 版本 4.4.2

测试写入标签不起作用的设备

  1. 三星galaxy note 2(GT-N7100)。 android 版本 4.4.2
  2. 一些本地制造商的 phone。 android 版本 4.2
  3. Famocophone。 android 版本 4.4.2

如您所见,一个4.4.2版本可以,另一个不可以。 (请注意,我在标签中有密码并且我已成功验证)

目前我所知道的是这是一个。但是我曾经使用过 writeNdefMessage 方法,那些设备可以写入标签。我刚切换到 tranceive 方法,因为我用密码保护标签。

根据this thread's answer,这可能是因为phone的nfc容量无法满足标签的功率要求。但正如我之前提到的,我正在使用 writeNdefMessage 并且它正在工作,所以电源需求是不可能的。

注意:使用读取命令 (byte) 48 可以读取标签内容,即使写入 (byte) 162 会出错。

主要问题是phone太慢。所以要解决这个问题,你必须重构你的代码,这样它会更快。

我所做的是为并行计算创建多个线程。