android - Android 到 Windows USB 文件传输文件丢失
问题描述
我最近创建了一个将数据记录到外部存储的应用程序(也就是说 myFilePath = Environment.getExternamStorageDirectory().toString() + "mypath/thisCollectionsFolder/myfile.data")。当我通过 airdroid 或 es 文件资源管理器查找文件时,我可以在完成录制后找到它。但是,如果我通过 USB 将手机插入 Windows PC 并导航到 mypath,我暂时无法在资源管理器中看到“thisCollectionsFolder”。如果我让手机“休息”一会儿,我就可以看到“thisCollectionFolder”。有时“myfile.data”在“thisCollectionFolder”中可见,有时我必须让手机“休息”一段时间才能看到它。
我在 Nexus 6p 和 Pixel 2 上观察到了这种行为,它们都在两台不同的 Windows PC 上运行 android 8。写入文件后,我尝试重新启动手机,但这不会使其在资源管理器中可见。请注意,我的应用程序是使用 Xamarin 编写的,并且我使用 dotnet System.IO 类进行编写。
我的问题如下
- 这是一个已知的问题?
- 我可以在我的应用程序中做些什么来确保文件在写入后立即可见吗?
谢谢!
解决方案
- 安卓设备连接电脑时,电脑不会读取设备的磁盘文件数据。它通过 MTP 服务映射。
Android的数据源Provider在一个媒体数据库中的映射:com.android.provider.media/databases/external.db。在这个数据库中,有一个files表。在这个表中,所有的记录都会被 MTP 服务映射到 PC 的文件管理器中。
同时,我们在PC上所做的修改也是先对服务器中的files表进行了修改,然后才会触发系统的磁盘操作。
因此,您可以指定文件的路径,然后系统会扫描该文件,然后将数据记录到外部存储后同步到PC。使用 mtehod MediaScannerConnection
。Xamarin.Android 有相应的方法。有关更多详细信息,您可以参考此处。
推荐阅读
- python - 操作 CSV 文件中的行数据并使用 Python 将其附加到新列中
- javascript - 使用文件上传获取当前上传的图片并调整大小
- ionic-framework - 无法在 Ionic 4 中设置指纹选项 - 指纹 AIO
- powershell - 下载 powershell 脚本存储库以供离线使用
- windows - 即使 SSH-Add 可以添加新密钥,OpenSSH 也无法提供密钥
- hbase - Apache Sqoop 从 Oracle 导入到 hbase 错误
- python - 空闲时python urwid超时
- flutter - Flutter:如何显示包含毫秒的时钟?
- html - Vue 2.x 过渡不适用于 Html 标签 ID CSS
- ansible - Ansible 加载 epel 和 yum 更新