7

重命名由应用程序触发的文件之类的更改仅在重新启动 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 应用程序访问的文件结构看起来仍然很好。

问题:这种行为是错误还是我错误地实现了它?什么是正确的实现?

到目前为止我为解决此问题所做的尝试:

  1. 我目前的解决方法是避免scanFile使用目录。
  2. 我可以通过使用不带MediaScannerConnection#scanFile. 重新启动后,我可以再次使用 Windows 资源管理器访问该目录。
  3. 使用 Windows 资源管理器重命名实际上是目录的文件不会还原它们。即使在重新启动后。
  4. https://stackoverflow.com/a/21918085/433718中建议的这一行 不会刷新 USB-MTP 视图,也不会将目录转换为文件:

    context.sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE,
                Uri.fromFile(newFile.getParentFile()));
    
  5. 也许相关:

4

1 回答 1

13

我最终在我想要显示的每个目录中创建了一个虚拟文本文件,并在文件上使用了 scanFile 。

1)创建目录,但不要“扫描”目录

2)复制文件到目录

3) 在文件路径上运行 scanFile

MediaScannerConnection.scanFile (_application, new String[] { filePath }, null, null);
于 2016-02-12T22:41:22.890 回答