Не удается получить сообщение Ndef от NdefFormatable объекта

#android #nfc #ndef

Вопрос:

Цель readData приведенного ниже метода состоит в том, чтобы вернуть сообщение NDEF, независимо от того, поддерживает ли тег формат NDEF или является «формируемым NDEF».

 class WritableTag (tag: Tag) {
    private val NDEF = Ndef::class.java.canonicalName
    private val NDEF_FORMATABLE = NdefFormatable::class.java.canonicalName

    private val ndef: Ndef?
    private val ndefFormatable: NdefFormatable?

    val tagId: String?
        get() {
            if (ndef != null) {
                return Tools.byteArrayToHex(ndef.tag.id)
            } else if (ndefFormatable != null) {
                return Tools.byteArrayToHex(ndefFormatable.tag.id)
            }
            return null
        }

    init {
        val technologies = tag.techList
        val tagTechs = Arrays.asList(*technologies)
        if (tagTechs.contains(NDEF)) {
            Log.i("WritableTag", "contains ndef")
            ndef = Ndef.get(tag)
            ndefFormatable = null
        } else if (tagTechs.contains(NDEF_FORMATABLE)) {
            Log.i("WritableTag", "contains ndef_formatable")
            ndefFormatable = NdefFormatable.get(tag)
            ndef = null
        } else {
            throw FormatException("Tag doesn't support ndef")
        }
    }

    fun readData(): NdefMessage {
        if (ndef != null) {
            ndef.connect()
            if (ndef.isConnected) {
                return ndef.ndefMessage
            }
        } else if (ndefFormatable != null) {
            ndefFormatable.connect()
            if (ndefFormatable.isConnected) {
                return ndefFormatable.ndefMessage // Unresolved reference: ndefMessage
            }
        }
        throw Exception("Cannot read ndef message")
    }
}
 

Я могу получить ndefMessage информацию из ndef тега, но не из ndefFormatable тега. Как это возможно?

Ответ №1:

Поскольку ndefFormatable тег не находится в нужном состоянии для хранения ndefMessage s, его необходимо отформатировать для хранения ndefMessage s.

Невозможно прочитать ndefMessage ndefFormatable тег from, это в основном пустая карточка, которая указывает, что она могла бы хранить a ndefMessage , если бы была настроена для их хранения.

Все, что вы можете сделать, это format это write , а затем ndefMessage