【问题标题】:Is it possible to transfer NFC files from one Android device to another without the 'Touch to Beam' screen?是否可以在没有“Touch to Beam”屏幕的情况下将 NFC 文件从一台 Android 设备传输到另一台设备?
【发布时间】:2017-07-21 23:40:08
【问题描述】:

根据这个问题,我找到了在不使用 Beam UI 的情况下传输消息的方法

Is it possible to transfer NFC data from one Android device to another without the 'Touch to Beam' screen?

这就是我想要的答案:

只有从 Android 4.4 开始,才有可能通过 NFC 在两台 Android 设备之间进行通信,而无需 Beam UI(实际上根本不使用 Android Beam 和点对点模式):如果两台设备都是 4.4+,一个设备可以使用 Android HCE 模拟非接触式智能卡,并且一个设备可以使用读卡器模式 API(这仅适用于 4.4 中引入的读卡器模式 API,因此两台设备都需要 4.4+)与模拟的智能卡进行通信。

但是我想传输整个文件,可以吗?我无法使用 https://github.com/xamarin/monodroid-samples 中的 CardReader 和 CardEmulation 示例在 5.1 和 7.0 设备之间进行操作。

如果我尝试发送大数据(例如文件中的所有字节),它们永远不会连接。但是,对于小消息(例如示例中的原始数字),它可以完成,但并非没有很多收发异常。

【问题讨论】:

    标签: android xamarin nfc apdu hce


    【解决方案1】:

    当然,您可以通过 NFC 卡模拟交换大量数据(例如整个文件)。由于 NFC 相当慢,但直接通过 NFC 传输文件可能不是您的最佳选择。

    使用 NFC 进行数据传输

    在卡模拟模式下,您需要 应该使用 APDU(参见 ISO/IEC 7816-4)在读卡器应用和 HCE 应用之间进行通信。在大多数设备上,APDU 仅限于它们的短格式,这意味着您从阅读器发送到 HCE 应用程序的每个请求最多只有 255 个数据字节(+ 4 个标头字节 + 最大 2 个字节长度信息),并且最多 256 个字节(+ 2 个状态字节)用于从 HCE 应用到阅读器的响应。

    因此,您需要将文件拆分成可以打包成 APDU 的更小块。您可能需要考虑创建一个简单的协议,允许您请求文件的特定块(由偏移量和长度标识)。例如,您可以发送这样的命令 APDU 来请求文件的一部分:

    80 10 XX YY ZZ

    XX YY 是文件中的两字节偏移量,ZZ 是一字节长度。

    HCE 应用可以通过响应 APDU 来回答您:

    90 00

    90 00是表示命令成功执行的状态字。

    使用 NFC 建立带外通道

    由于 NFC 相当慢且不适合交换大量数据,您可能只想使用 NFC 建立初始连接。然后,您可以交换用于传输实际数据文件的蓝牙或 Wi-Fi 连接的凭据。

    【讨论】:

      猜你喜欢
      • 2014-05-29
      • 1970-01-01
      • 2023-03-24
      • 2018-10-31
      • 1970-01-01
      • 2012-06-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多