是否有可能将NFC文件从一个Android设备传输到另一个Android设备而无需“触摸到光束”#39;屏幕?

时间:2017-07-21 23:40:09

标签: android xamarin nfc apdu hce

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

  

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

这是我想要的答案:

  

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

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

如果我尝试发送大数据(例如文件中的所有字节),则它们永远不会连接。但是,对于小消息(例如样本中的原始数字),可以完成,但不是没有大量的传递异常。

1 个答案:

答案 0 :(得分:0)

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

使用NFC进行数据传输

在卡片仿真模式下,需要 在大多数设备上,APDU仅限于其简短形式,这意味着对于您从阅读器发送到HCE应用程序的每个请求,您最多只有255个数据字节(+ 4个头字节+最多2个字节长度信息)从HCE应用程序到阅读器的响应最多256个字节(+ 2个状态字节)。

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

80 10 XX YY  ZZ

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

在您的共鸣中,HCE应用程序可以使用响应APDU回答:

<DATA>  90 00

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

使用NFC建立带外信道

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