由应用程序触发的重命名文件等更改仅在 Android 设备重启后出现在 USB-MTP 接口(interface)上或在您像这样在 MediaScanner 上注册新文件后(参见 Trigger mediascanner on specific path (folder), how to?) :
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 View 损坏了。 Android 应用程序访问的文件结构看起来仍然很好。
问题:此行为是错误还是我实现不当?什么是正确的实现?
到目前为止,我已尝试解决此问题:
- 我目前的解决方法是避免对目录使用
scanFile
。 - 我可以通过使用没有
MediaScannerConnection#scanFile
的 Android 应用重命名文件,将文件转换回目录。重新启动后,我可以再次使用 Windows 资源管理器访问该目录。 - 使用 Windows 资源管理器重命名实际上是目录的文件不会恢复它们。即使在重启之后。
https://stackoverflow.com/a/21918085/433718 中建议的这一行 不刷新 USB-MTP View ,也不转换目录 进入文件:
context.sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, Uri.fromFile(newFile.getParentFile()));
可能相关:
- https://stackoverflow.com/a/27321544/433718
- 使用内容解析器进行各种文件操作,例如在此答案中删除文件:Android Deleting Files MediaScannerConnection
最佳答案
我最终在每个我想使其可见的目录中创建了一个虚拟文本文件,并对文件使用了 scanFile。
1) 创建目录,但不“扫描”目录
2) 复制文件到目录
3) 在文件路径上运行 scanFile
MediaScannerConnection.scanFile (_application, new String[] { filePath }, null, null);
关于android - 在 Android 5 Lollipop 上使用 USB-MTP 访问目录时,MediaScannerConnection#scanFile 将目录转换为文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31157882/