android - Google Nearby 和 onPayloadTransferUpdate 频率中的传入文件负载感知

标签 android bluetooth wifi-direct google-nearby

我在一个非常简单的场景中通过 Nearby 在两部手机之间发送文件。

发送者简单地构造一个Payload.Type.FILE类型的Payload并将其发送给接收者 .

接收方端,我想知道文件传输何时开始(接收方何时意识到传入文件)。在文档中,它说明了关于 onPayloadReceived 的内容:

Depending on the type of the Payload, all of the data may or may not have been received at the time of this call. Use onPayloadTransferUpdate(String, PayloadTransferUpdate) to get updates on the status of the data received.

但是,onPayloadTransferUpdate 似乎仅在文件的重要部分已传输后才被调用。根据我的测试,每次附近收到至少 2^16 字节时都会调用它。

简而言之,我想知道接收方是否可以在我的文件的任何字节实际发送之前知道有效载荷传输的开始,即 update.getBytesTransferred() == 0 .

此外,为什么每 2^16 字节调用一次 onPayloadTransferUpdate?总是这个尺寸吗?

最佳答案

是的,您是正确的,onPayloadReceived() 回调仅在收到第一个 block 时触发。

就像@Xlythe 提到的那样,如果您希望在发送方开始传输时向接收方发出信号,您可以从发送方发送一个 BYTES 有效负载,让接收方知道文件即将到来。

在任何情况下,鉴于我们当前的 block 大小为 64k,传输开始与接收器接收到第一个 block 之间的延迟应该(同样,正如@Xlythe 提到的)<1 秒,因为蓝牙经典的带宽> 64KB/秒。

这不是你看到的吗?

关于android - Google Nearby 和 onPayloadTransferUpdate 频率中的传入文件负载感知,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51261753/

相关文章:

android - 更改 WiFi-Direct IP 范围?在 Android WiFi-Direct 中强制使用 IPv6?

java - LinearLayout 上的 setMinimumHeight() 不起作用(在子类中)

java - 使用蓝牙发送字符或字符串而不是 ASCII 代码

android - 如何在不使用 native 代码的情况下要求用户在 NativeScript 上启用蓝牙

ios - 如何正确实现 didReceiveWriteRequests? iOS6 核心蓝牙

android - 如何在 Android 和 Linux 之间设置 Wifi-Direct 连接

android - WifiP2pDnsSdServiceInfo.newInstance 中的可用服务类型

android - 如何更改应用程序的 UI 以匹配 Android 中的操作系统行为

android - 为企业和客户提供单独的移动应用程序,还是使用不同登录名的单个应用程序?

android - 以编程方式按顺序创建按钮