Я разрабатываю приложение с NFC и NFC TAG (ST25). При отправке командой nfcV.transceive() более 13 байт получаю ошибку "ТЕГ БЫЛ ПОТЕРЯН", но это происходит только на смартфоне XIAOMI, на остальных работает корректно.
Я разрабатываю приложение с NFC и NFC TAG (ST25). При отправке командой nfcV.transceive() более 13 байт получаю ошибку "ТЕГ БЫЛ ПОТЕРЯН", но это происходит только на смартфоне XIAOMI, на остальных работает корректно. [code] private fun readTag(intent: Intent) {
if (NfcAdapter.ACTION_NDEF_DISCOVERED == intent.action || NfcAdapter.ACTION_TECH_DISCOVERED == intent.action || NfcAdapter.ACTION_TAG_DISCOVERED == intent.action) { val tag: Tag? = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG, Tag::class.java)
if (tag != null) { val st25 = ST25DVTag.get(tag) st25?.connect() val stringToConvert = etDataToWrite.text.toString() val messageBytes = stringToConvert.toByteArray(Charset.forName("UTF-8")) try { st25.WriteMB(messageBytes.size - 1, messageBytes) } catch (e: IOException) { e.printStackTrace() Toast.makeText(this, "ERROR Write tag NFC: $e",Toast.LENGTH_SHORT).show() Log.e("NFC ERROR","OK write tag NFC: $e") } finally { try { st25.close() } catch (e: IOException) { e.printStackTrace() } } }
fun WriteMB(size: Int , data:ByteArray): ByteArray { val writecommandLength = 4 + data.size // Calculate total length including data val writecommand = ByteArray(writecommandLength) // Copy ST25DV_REQUEST_HEADER, 0xCA, IC_MFG_CODE, and size System.arraycopy(byteArrayOf(ST25DV_REQUEST_HEADER,0xAA.toByte(),IC_MFG_CODE,size.toByte()),0, writecommand, 0, 4) // Copy the data to the end of writecommand System.arraycopy(data, 0, writecommand, 4, data.size) var lenmax = tag.maxTransceiveLength return safeTransceive(writecommand) }
private fun safeTransceive(command: ByteArray): ByteArray { var nTry = 0 var errorCode = COMMAND_OK do { val response = tag.transceive(command) errorCode = response[0] Log.d("Transceive","ErrorCode:"+errorCode) if (errorCode == COMMAND_OK) return response.copyOfRange(1,response.size) else { nTry++ Thread.sleep(COMMAND_DELAY) } } while (nTry < COMMAND_RETRY) throw ST25DVException("IOError: code " + errorCode) } [/code] Когда «messageBytes.size» превышает 13 байт, возникает ошибка. Возможна ли аппаратная проблема XIAOMI? Как я могу решить эту проблему? Спасибо