如何通过Android NFC传输纯文本?

问题描述 投票:0回答:1

我是Android NFC的新手,正在android中开发NFC应用程序。我的想法是设备A需要向设备B发送纯文本。在Android NFC中可以吗?我刚刚在Reader和Writer上尝试了Tag Dispatcher(enableForegroundDispatch,disableForegroundDispatch)。我的读者端代码是:

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详细信息)。但是我无法通过NFC发送纯文本。我不知道我做错了什么。我不知道这种方法是对还是错。请帮助我进行此操作。

提前感谢。

android kotlin nfc data-transfer plaintext
1个回答
1
投票

因此,从API 29开始,在Android对等NFC(设备对设备)(也称为Android Beam)中已弃用)>

请参见https://developer.android.com/reference/android/nfc/NfcAdapter#setNdefPushMessage(android.nfc.NdefMessage,%20android.app.Activity,%20android.app.Activity...)

您使用错误的方法在较旧的Android版本中使用Android Beam。有关实际使用方法的更多详细信息,请参见https://developer.android.com/guide/topics/connectivity/nfc/nfc#p2p。 (您正在使用写入NFC卡而不是其他设备的方法)

注意:通过NFC的点对点仅适用于Android,iOS不支持它,因此已弃用,而支持Bluetooth / Wifi Direct

[请注意,仍然可以让一个Android设备使用主机卡仿真来模拟上面带有NDEF消息的Type 4 NFC卡,但这很难实现。

更新:

链接到主机卡仿真https://developer.android.com/guide/topics/connectivity/nfc/hce和4类卡规格http://apps4android.org/nfc-specifications/NFCForum-TS-Type-4-Tag_2.0.pdf

© www.soinside.com 2019 - 2024. All rights reserved.