gpt4 book ai didi

android - 我可以 "safely remove"来自 Android OTG 的 USB 设备,在向它写入文件后?

转载 作者:行者123 更新时间:2023-12-02 01:18:07 27 4
gpt4 key购买 nike

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

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

我发现最好的方法是启动一个带有 ACTION_MEMORY_CARD_SETTINGS Intent 的 Activity。但从视觉上看,这是一种糟糕的用户体验,更不用说典型用户可能不遵守规定了。 (他们会在看到“管理存储”页面时拔掉插头。)

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

(据我所知,在 Lollipop 之前,当挂载的 USB 设备是一个真实的文件系统,具有真实的 File 时,可以使用 sync(),但那个关键设施显然丢失了。如果有办法找回它,我很想知道。)

最佳答案

虽然从 Lollipop 开始您不能在外部文件上调用 sync(),但我发现我可以为 DocumentFile 获取 ParcelFileDescriptor StorageAccessFramework 为您提供的 - 然后,您可以获得它的文件描述符,并对其调用 sync()

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

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

关于android - 我可以 "safely remove"来自 Android OTG 的 USB 设备,在向它写入文件后?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41619858/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com