首页 > 解决方案 > 如何将文本从 nfc 发​​送到另一个 android 设备?

问题描述

我一直在寻找大约两个星期,但我找不到解决方案。我尝试使用HostNfcFService进行投射并使用onTagDiscovered上的NfcAdapter.ReaderCallback进行阅读,但找不到获取文本的方法。

AndroidBeam 已弃用到 android10。

这是我模拟 nfc 标签的服务

class MyHostNfcFService : HostNfcFService() {


override fun processNfcFPacket(commandPacket: ByteArray, extras: Bundle?): ByteArray {

    val msg = "Hello World!!".toByteArray()
    val buffer = ByteBuffer.allocate(msg.size + 2)
    buffer.put((msg.size + 2).toByte())
    buffer.put(0.toByte())
    buffer.put(msg)
    return buffer.array()
}

override fun onDeactivated(reason: Int) {

}

在activity和manifest中这个服务的初始化是正确的。另一方面,我展示了阅读它的方式。

类 ReaderFragment : Fragment(), ReaderCallback{

override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
    super.onViewCreated(view, savedInstanceState)

    val adapter = NfcAdapter.getDefaultAdapter(activity)
    adapter.enableReaderMode(
            activity,
            this,
            NfcAdapter.FLAG_READER_NFC_A or NfcAdapter.FLAG_READER_SKIP_NDEF_CHECK,
            null)
}

override fun onResume() {
    Log.d(TAG, "onResume: ")
    super.onResume()

    val adapter = NfcAdapter.getDefaultAdapter(activity)
    adapter.enableReaderMode(
            activity,
            this,
            NfcAdapter.FLAG_READER_NFC_A or NfcAdapter.FLAG_READER_SKIP_NDEF_CHECK,
            null)
}

override fun onPause() {
    Log.d(TAG, "onPause: ")
    super.onPause()

    NfcAdapter.getDefaultAdapter(activity)
            .disableReaderMode(activity)
}
override fun onTagDiscovered(tag: Tag) {

    logd(TAG, "onTagDiscovered: ")

    val nfc = IsoDep.get(tag)
    if (nfc != null) {
        logd(TAG, nfc.tag.toString())
        try {
            nfc.connect()
            val res = nfc.transceive(MyHostApduService.SELECT)
            logd(TAG, String(res, Charset.forName("UTF-8")))

        } catch (e: IOException) {
            e.printStackTrace()
        }
    }
    
}

}

我打电话给nfc.transceive(MyHostApduService.SELECT)这是什么。

class MyHostApduService : HostApduService() {

override fun processCommandApdu(commandApdu: ByteArray, extras: Bundle?): ByteArray {


    return commandApdu;
}


override fun onDeactivated(reason: Int) {
    Log.i(TAG, "onDeactivated, reason=" + reason)
}

companion object {


    val SELECT = byteArrayOf(
            0x00, 0xA4.toByte(), 0x04, 0x00,
            0x07,
                    0xF0.toByte(), 0x39, 0x41, 0x48, 0x14, 0x81.toByte(), 0x00,
            0x00
    )
}

}

我处理 commandApdu 但我没有得到我想要的 Hello World 。

标签: androidtextnfcsend

解决方案


推荐阅读