我正在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)标签。
答案 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()
。