Android 我可以吗;“安全移除”;安卓OTG的USB设备,在写入文件后?

Android 我可以吗;“安全移除”;安卓OTG的USB设备,在写入文件后?,android,usb,usb-otg,unmount,Android,Usb,Usb Otg,Unmount,这仅适用于Android棒棒糖5.0及以上版本 我们有一个自定义设备,可以通过USB安装为文件系统。我已经编写了一个Android应用程序,允许用户使用OTG挂载设备,然后更新设备上的文件。这部分工作起来就像一个符咒(按文档文件的糟糕程度计算)。我不知道如何卸载或安全地移除设备,或者让用户知道他们可以安全地拔出设备 我发现最好的方法是使用意向操作\内存\卡\设置开始一项活动。但从视觉上看,这是一种可怕的用户体验,更不用说典型用户可能的不合规性了。(当他们看到“管理存储”页面时,只需拔下插头即可。

这仅适用于Android棒棒糖5.0及以上版本

我们有一个自定义设备,可以通过USB安装为文件系统。我已经编写了一个Android应用程序,允许用户使用OTG挂载设备,然后更新设备上的文件。这部分工作起来就像一个符咒(按文档文件的糟糕程度计算)。我不知道如何卸载或安全地移除设备,或者让用户知道他们可以安全地拔出设备

我发现最好的方法是使用意向操作\内存\卡\设置开始一项活动。但从视觉上看,这是一种可怕的用户体验,更不用说典型用户可能的不合规性了。(当他们看到“管理存储”页面时,只需拔下插头即可。)

有人知道如何通过编程方式刷新对USB设备的写入吗?或者确定是否仍有对文件、设备或任何内容的写入挂起?或者有什么方法可以安全地移除一个没有臭味的OTG USB设备


(我收集到在棒棒糖之前,当一个挂载的USB设备是一个真正的文件系统,有真正的
文件时,人们可以
同步()
,但关键的功能显然已经丢失了。如果有办法找回它,我很想知道。)

虽然你不能像棒棒糖那样在外部文件上调用
同步()
,我发现我可以为
StorageAccessFramework
提供的
DocumentFile
获取
ParcelFileDescriptor
,然后,您可以为它获取一个文件描述符,并对其调用
sync()

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


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

我删除了答案,所以可能其他人会给出更好的答案<代码>iMontService
可以使用StorageManager
/core/java/android/os/storage/StorageManager进行访问。示例5中的java
()是一个使用StorageManager的
mountMedia()
函数,但是很可能会再次出现权限问题…可能会在上看到最低的答案。它使用一些库,然后在
IMountService
unmountVolume()
。显然,添加的库覆盖了权限问题。。。除此之外,AppStore中还有许多“卸载USB应用”,几乎所有应用都需要根目录。。。