为什么我在制作NFC标签只读时会出现IOException

时间:2014-02-03 14:03:50

标签: android nfc ndef

我正在NFC AsyncTasks进行doInBackground()次写作。当我写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)标签。

1 个答案:

答案 0 :(得分:1)

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

原因是android.nfc.tech.Ndef(请参阅here,从第383行开始)要求NFC服务返回ErrorCodes.SUCCESS以成功锁定ErrorCodes.ERROR_INVALID_PARAM以解锁失败并{ {1}}任何与IO相关的错误。但是,如果锁定成功(参见here,第1438行),则NFC服务返回ErrorCodes.SUCCESS;如果因任何原因锁定失败,则NFC服务返回ErrorCodes.SERROR_IO(参见here,第1440行)。似乎根本没有返回ErrorCodes.ERROR_IO,因此ErrorCodes.ERROR_INVALID_PARAM方法通常不会返回makeReadOnly()