【问题标题】:Why I'm getting IOException when making NFC tag read only为什么在使 NFC 标签只读时出现 IOException
【发布时间】:2014-02-03 14:03:49
【问题描述】:

我正在写我的NFCAsyncTasksdoInBackground()。当我编写 NdefRecord 时,它运行良好,但是当我尝试将标签设为只读时,我得到了IOException。以下是发生异常的代码:

  if (readOnly && !ndef.canMakeReadOnly()) {
        throw new NdefCantMakeReadOnlyException(R.string.cant_make_read_only);
    } else if (readOnly) {
        ndef.makeReadOnly(); //IOException
    }

此 makeReadOnly 适用于 Mifare Ultralight (MF0ICU1) 标签。

【问题讨论】:

    标签: android nfc ndef


    【解决方案1】:

    浏览 Android 4.4.2 源代码(我没有检查旧版本)显示,如果 makeReadOnly() 因任何原因失败,您将始终获得 IOException。所以你在 Android 中发现了一个错误,或者至少与 API 文档不匹配。

    原因是android.nfc.tech.Ndef(请参阅here,从第 383 行开始)期望 NFC 服务返回 ErrorCodes.SUCCESS 以表示成功锁定,ErrorCodes.ERROR_INVALID_PARAM 表示锁定失败,ErrorCodes.ERROR_IO 表示任何与 IO 相关的错误。但是,如果锁定成功,NFC 服务将返回 ErrorCodes.SUCCESS(参见 here,第 1438 行),如果锁定因任何原因失败(参见 here,第 1440 行),则返回 ErrorCodes.ERROR_IO。 ErrorCodes.ERROR_INVALID_PARAM 似乎根本没有返回,因此 makeReadOnly() 方法通常不应该返回 false

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-07-05
      • 1970-01-01
      • 2016-07-16
      • 2013-04-02
      • 2020-06-10
      • 1970-01-01
      • 2020-06-10
      • 1970-01-01
      相关资源
      最近更新 更多