0

标题就是问题。我正在使用 libaums 使用 BufferedInput/OutputStream 双向传输文件,最后调用 close() 。然后我关闭 UsbMassStorageDevice 并退出应用程序。

但是,在设置-> 存储中,我看到 USB OTG 存储保持安装状态。它只能在“设置”中的弹出窗口中卸载。似乎没有合法的 Android API 可以从代码中卸载 USB 驱动器。

由于我正在构建一个最小的 UI/最小交互应用程序,这是一个主要的麻烦。但是,我在没有明确卸载的情况下多次拔下记忆棒,并且复制的文件始终有效(使用 diff 进行检查)。

那么 - 复制文件并使用 libaums 调用 close 可以保证文件的完全传输吗?或者是否有一些无法强制刷新的底层操作系统内存缓冲区,因此在不卸载的情况下拔下驱动器会导致文件损坏?

4

1 回答 1

3

好问题!你应该没问题,因为 USB 通信总是得到确认。这意味着,如果您的 close 调用无异常返回,则可以保证 USB 驱动器收到数据并以“Ok”回复主机。您可以看到代码 [1] 的特定部分,我正在检查驱动器是否成功回答。

[1] https://github.com/magnusja/libaums/blob/develop/libaums/src/main/java/com/github/mjdev/libaums/driver/scsi/ScsiBlockDevice.java#L175-L191

于 2018-03-20T06:30:37.583 回答