我是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发送纯文本。我不知道我做错了什么。我不知道这种方法是对还是错。请帮助我进行此操作。
提前感谢。
因此,从API 29开始,在Android对等NFC(设备对设备)(也称为Android Beam)中已弃用)>
您使用错误的方法在较旧的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