重命名由应用程序触发的文件之类的更改仅在重新启动 Android 设备后或在 MediaScanner 上注册新文件后才会出现在 USB-MTP 界面上(请参阅在特定路径(文件夹)上触发 mediascanner,如何? ):
file.renameTo(newFile);
MediaScannerConnection.scanFile(context,
new String[] { newFile.getAbsolutePath() }, null, null);
USB-MTP 用于通过 USB 访问安卓设备的存储。例如,使用 Windows 资源管理器。
但是,使用 Android 5.0.2 (Build 10.6.A.0.454) 下的 Sony XPERIA Tablet Z (SGP321) 提供的文件夹newFile
将变成一个 4KB 的文件。我不再能够使用 Windows 资源管理器访问文件夹结构,也无法将文件复制到我的计算机。即使重新启动平板电脑!具有 Android 4.4.4 的同一设备不显示该行为。似乎只有 USB-MTP 视图被破坏了。android 应用程序访问的文件结构看起来仍然很好。
问题:这种行为是错误还是我错误地实现了它?什么是正确的实现?
到目前为止我为解决此问题所做的尝试:
- 我目前的解决方法是避免
scanFile
使用目录。 - 我可以通过使用不带
MediaScannerConnection#scanFile
. 重新启动后,我可以再次使用 Windows 资源管理器访问该目录。 - 使用 Windows 资源管理器重命名实际上是目录的文件不会还原它们。即使在重新启动后。
https://stackoverflow.com/a/21918085/433718中建议的这一行 不会刷新 USB-MTP 视图,也不会将目录转换为文件:
context.sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, Uri.fromFile(newFile.getParentFile()));
也许相关:
- https://stackoverflow.com/a/27321544/433718
- 使用内容解析器进行各种文件操作,例如在此答案中删除文件:Android Deleting Files MediaScannerConnection