MediaScannerConnection#scanFile 在 Android 5 Lollipop 上使用 USB-MTP 访问目录时将目录转换为文件
MediaScannerConnection#scanFile converts directories into files when accessing them with USB-MTP on Android 5 Lollipop
由应用程序触发的重命名文件等更改仅在 Android 设备 或 注册新文件后重新启动后才会出现在 USB-MTP 界面上MediaScanner 像这样(参见 Trigger mediascanner on specific path (folder), how to?):
file.renameTo(newFile);
MediaScannerConnection.scanFile(context,
new String[] { newFile.getAbsolutePath() }, null, null);
USB-MTP 用于通过 USB 访问 android 设备的存储。例如。使用 Windows 资源管理器。
但是, 与 Sony XPERIA Tablet Z (SGP321) 在 Android 5.0.2 (Build 10.6.A.0.454) 文件夹中提供newFile
会变成一个4KB的文件。我无法再使用 Windows Explorer 访问文件夹结构,也无法将文件复制到我的计算机。即使在平板电脑重启后!与 Android 4.4.4 相同的设备不显示该行为。似乎只有 USB-MTP 视图损坏了。 android 应用程序访问的文件结构看起来仍然很好。
问题:此行为是错误还是我实施不正确?正确的实施方式是什么?
到目前为止我已尝试解决此问题:
- 我目前的解决方法是避免对目录使用
scanFile
。
- 我可以通过使用没有
MediaScannerConnection#scanFile
的 android 应用重命名文件来将文件转换回目录。重新启动后,我可以再次使用 Windows 资源管理器访问该目录。
- 使用 Windows 资源管理器重命名实际上是目录的文件不会恢复它们。即使重启后。
中建议的这一行
不刷新 USB-MTP 视图,也不转换目录
进入文件:
context.sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE,
Uri.fromFile(newFile.getParentFile()));
可能相关:
- 使用内容解析器进行各种文件操作,例如在此答案中删除文件:Android Deleting Files MediaScannerConnection
我最终在每个要显示的目录中创建了一个虚拟文本文件,并对文件使用了 scanFile。
1) 创建目录,但不要 "scan" 目录
2) 复制文件到目录
3) 运行 文件路径上的 scanFile
MediaScannerConnection.scanFile (_application, new String[] { filePath }, null, null);
由应用程序触发的重命名文件等更改仅在 Android 设备 或 注册新文件后重新启动后才会出现在 USB-MTP 界面上MediaScanner 像这样(参见 Trigger mediascanner on specific path (folder), how to?):
file.renameTo(newFile);
MediaScannerConnection.scanFile(context,
new String[] { newFile.getAbsolutePath() }, null, null);
USB-MTP 用于通过 USB 访问 android 设备的存储。例如。使用 Windows 资源管理器。
但是, 与 Sony XPERIA Tablet Z (SGP321) 在 Android 5.0.2 (Build 10.6.A.0.454) 文件夹中提供newFile
会变成一个4KB的文件。我无法再使用 Windows Explorer 访问文件夹结构,也无法将文件复制到我的计算机。即使在平板电脑重启后!与 Android 4.4.4 相同的设备不显示该行为。似乎只有 USB-MTP 视图损坏了。 android 应用程序访问的文件结构看起来仍然很好。
问题:此行为是错误还是我实施不正确?正确的实施方式是什么?
到目前为止我已尝试解决此问题:
- 我目前的解决方法是避免对目录使用
scanFile
。 - 我可以通过使用没有
MediaScannerConnection#scanFile
的 android 应用重命名文件来将文件转换回目录。重新启动后,我可以再次使用 Windows 资源管理器访问该目录。 - 使用 Windows 资源管理器重命名实际上是目录的文件不会恢复它们。即使重启后。
中建议的这一行 不刷新 USB-MTP 视图,也不转换目录 进入文件:
context.sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, Uri.fromFile(newFile.getParentFile()));
可能相关:
- 使用内容解析器进行各种文件操作,例如在此答案中删除文件:Android Deleting Files MediaScannerConnection
我最终在每个要显示的目录中创建了一个虚拟文本文件,并对文件使用了 scanFile。
1) 创建目录,但不要 "scan" 目录
2) 复制文件到目录
3) 运行 文件路径上的 scanFile
MediaScannerConnection.scanFile (_application, new String[] { filePath }, null, null);