Как передать простой текст через Android NF C? - PullRequest
0 голосов
/ 23 марта 2020

Я новичок в Android NF C и разрабатываю приложение NF C в android. Моя идея - устройство А, нужно отправить простой текст на устройство В. Возможно ли это в Android NF C? Я только что попробовал с Tag Dispatcher (enableForegroundDispatch, disableForegroundDispatch) как в Reader, так и в Writer. Код стороны моего устройства чтения:

nfcAdapter.enableForegroundDispatch(this, pendingIntent, intentFilters, techList)
override fun onNewIntent(intent: Intent?) {
intent.getParcelableArrayExtra(NfcAdapter.EXTRA_NDEF_MESSAGES)?.also { rawMessages ->
            val messages: List<NdefMessage> = rawMessages.map { it as NdefMessage }

            for (message in messages) {
                for (record in message.records) {
                    println(" ${record.toString()}")
                }
            }
        }
}

Код стороны моего устройства записи:

nfcAdapter.enableForegroundDispatch(
        this, pendingIntent, intentFilters, techList)
override fun onNewIntent(intent: Intent?) {
if (action.equals(NfcAdapter.EXTRA_TAG)) {
        val tagFromIntent = intent.getParcelableExtra<Tag>(NfcAdapter.EXTRA_TAG)
        if (NfcAdapter.ACTION_TECH_DISCOVERED.equals(action)
            || NfcAdapter.ACTION_NDEF_DISCOVERED.equals(action)
        ) {
            println("testing=============== tag discovered ")
            writeNdefMessage(tagFromIntent!!, "This is my first app")
        }
    }}

private fun writeNdefMessage(tag: Tag, message: String) {
    val record: NdefRecord = newTextRecord(message, Locale.ENGLISH, true)!!
    val ndefMessage = NdefMessage(arrayOf(record))
    try {
        if (isExist(tag.techList, NdefFormatable::class.java.name)) {
            val ndefFormatable = NdefFormatable.get(tag)
            try {
                if (!ndefFormatable.isConnected) {
                    ndefFormatable.connect()
                }
                ndefFormatable.format(ndefMessage)
            } finally {
                ndefFormatable.close()
            }
        } else if (isExist(tag.techList, Ndef::class.java.name)) {
            val ndef = Ndef.get(tag)
            try {
                if (!ndef.isConnected) {
                    ndef.connect()
                }
                if (ndef.isWritable) {
                    ndef.writeNdefMessage(ndefMessage)
                }
            } finally {
                ndef.close()
            }
        }
    } catch (e: FormatException) {
        println("Format failed exception")
    } catch (e: IOException) {
        println("")
    }
}

Приложение запускается при сканировании тега (с помощью AndroidManifest. xml подробности). Но я не могу отправить простой текст через NF C. Я не знаю, что я сделал не так. Я не знаю, правильный ли это подход или неправильный. Пожалуйста, помогите мне продолжить это.

Заранее спасибо.

1 Ответ

1 голос
/ 23 марта 2020

Таким образом, в Android одноранговая сеть NF C (от устройства к устройству) также называется Android Луч считается устаревшим с API 29

См. https://developer.android.com/reference/android/nfc/NfcAdapter#setNdefPushMessage (android .nf c .NdefMessage,% 20 android .app.Activity,% 20 android .app.Activity ...)

Вы используете неправильные методы для использования Android Луч в старых Android Версии. См. https://developer.android.com/guide/topics/connectivity/nfc/nfc#p2p для более подробной информации о том, как его использовать. (Вы используете методы для записи на карту NF C, а не на другое устройство)

Примечание. Одноранговая связь через NF C только Android, iOS не поддерживает ее и амортизируется в пользу Bluetooth / Wifi Direct

Обратите внимание, что все еще возможно иметь одно Android устройство, использующее эмуляцию хост-карты для эмуляции карты NF C типа 4 с сообщениями NDEF, но это довольно сложность в достижении.

Обновление:

Ссылка на эмуляцию хост-карты https://developer.android.com/guide/topics/connectivity/nfc/hce и карта типа 4 spe c http://apps4android.org/nfc-specifications/NFCForum-TS-Type-4-Tag_2.0.pdf

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...