2016-01-08 8 views
0

Этот вопрос задан пару раз, но он все еще не имеет четкого ответа. В связи с вопросом 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) 

То, что я пытался до сих пор:

  1. увеличение таймаута
  2. вручную писать, используя Transceive с командой записи

Испытательные устройства, где записываются метки работы:

  1. Samsung Galaxy Note 3 (SM-N900L). версия для Android 4.3
  2. Некоторые местные телефоны производителя. андроид версия 4.4.2

Тестовые устройства, где пишущие помечать не работает:

  1. Samsung Galaxy Note 2 (GT-N7100). версия для Android 4.4.2
  2. Некоторые местные телефоны производителя. версия для Android 4.2
  3. Famoco телефон. версия для Android 4.4.2

Как вы можете видеть, одна версия 4.4.2 работает, а другая не работает. (Обратите внимание, что у меня есть пароль в теге, и я успешно аутентифицируюсь)

То, что я знаю до сих пор, это то, что это hardware issue. Но однажды я использовал метод writeNdefMessage, и эти устройства могут писать в тег. Я просто переключился на метод tranceive, потому что я защищаю пароль от тега.

В соответствии с this thread's answer это может быть связано с тем, что емкость nfc телефона не может справиться с потребностью в теге. Но, как я уже упоминал ранее, я использовал writeNdefMessage, и он работал, поэтому требование мощности не может быть и речи.

Примечание: Чтение содержимого тегов работает с использованием команды чтения (byte) 48, хотя запись (byte) 162 дает ошибку.

ответ

1

Основная проблема заключается в том, что телефон слишком медленный. Поэтому, чтобы решить эту проблему, вам нужно реорганизовать свой код таким образом, чтобы он был быстрее.

Что я сделал, это создать несколько потоков для параллельных вычислений.

+0

Благодаря этому я понял, что если мы отлаживаем строковые линии, мы можем получить Transceive error, поэтому отладка не рекомендуется –