Этот вопрос задан пару раз, но он все еще не имеет четкого ответа. В связи с вопросом this, причина - из-за таймаута приемопередатчика. Некоторые разработчики сообщили об этом issue, но я не вижу четкого решения в потоке.Обход/быстрое исправление ошибки приемопередатчика?
Я пытаюсь написать в NTAG216, используя класс MifareUltralight. Я использую метод writePage
, и здесь происходит ошибка.
Это часть отчета об ошибке:
Error: java.io.IOException: Transceive failed at
android.nfc.TransceiveResult.getResponseOrThrow(TransceiveResult.java:52)
at android.nfc.tech.BasicTagTechnology.transceive(BasicTagTechnology.java:173)
То, что я пытался до сих пор:
- увеличение таймаута
- вручную писать, используя Transceive с командой записи
Испытательные устройства, где записываются метки работы:
- Samsung Galaxy Note 3 (SM-N900L). версия для Android 4.3
- Некоторые местные телефоны производителя. андроид версия 4.4.2
Тестовые устройства, где пишущие помечать не работает:
- Samsung Galaxy Note 2 (GT-N7100). версия для Android 4.4.2
- Некоторые местные телефоны производителя. версия для Android 4.2
- Famoco телефон. версия для Android 4.4.2
Как вы можете видеть, одна версия 4.4.2 работает, а другая не работает. (Обратите внимание, что у меня есть пароль в теге, и я успешно аутентифицируюсь)
То, что я знаю до сих пор, это то, что это hardware issue. Но однажды я использовал метод writeNdefMessage
, и эти устройства могут писать в тег. Я просто переключился на метод tranceive, потому что я защищаю пароль от тега.
В соответствии с this thread's answer это может быть связано с тем, что емкость nfc телефона не может справиться с потребностью в теге. Но, как я уже упоминал ранее, я использовал writeNdefMessage
, и он работал, поэтому требование мощности не может быть и речи.
Примечание: Чтение содержимого тегов работает с использованием команды чтения (byte) 48
, хотя запись (byte) 162
дает ошибку.
Благодаря этому я понял, что если мы отлаживаем строковые линии, мы можем получить Transceive error, поэтому отладка не рекомендуется –