3

这仅适用于 Android Lollipop 5.0 及更高版本。

我们有一个自定义设备,可以通过 USB 挂载为文件系统。我编写了一个 Android 应用程序,允许用户使用 OTG 安装设备,然后我们更新设备上的文件。这部分就像一个魅力(以 DocumentFile 的糟糕程度为模)。我想不通的是如何卸载或安全移除设备,或者让用户知道他们可以安全地拔下它。

我发现最好的方法是使用意图 ACTION_MEMORY_CARD_SETTINGS 启动 Activity。但从视觉上看,这是一种可怕的用户体验,更不用说典型用户可能不遵守规定了。(当他们看到“管理存储”页面时,他们只会拔掉电源。)

有谁知道以编程方式将写入刷新到 USB 设备的方法?或者确定是否仍有待写入文件、设备或任何内容的写入?或者有什么方法可以安全地移除不会发臭的 OTG USB 设备?

(我在 Lollipop 之前收集到,当挂载的 USB 设备是一个真正的文件系统时,带有真正File的 s,一个 can sync(),但是这个关键设施显然已经丢失了。如果有办法找回它,我很想知道它。 )

4

1 回答 1

2

虽然你不能sync()像 Lollipop 一样调用外部文件,但我发现我可以得到它ParcelFileDescriptor给你的 - 然后,你可以得到它的文件描述符,然后调用它。DocumentFileStorageAccessFrameworksync()

具体来说,为了在我的应用程序中解决这个问题,我最终编写了遍历我的外部存储目录的代码,并为每个文件打开一个ParcelFileDescriptor读取模式,调用sync()其文件描述符,然后关闭ParcelFileDescriptor.

这太糟糕了,但自从这样做以来,我在弹出 USB OTG 存储介质时没有丢失任何数据。

于 2017-06-26T16:31:47.237 回答