android - 在 Android 5 Lollipop 上使用 USB-MTP 访问目录时,MediaScannerConnection#scanFile 将目录转换为文件

标签 android android-5.0-lollipop sony-xperia android-mediascanner

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

问题:此行为是错误还是我实现不当?什么是正确的实现?

到目前为止,我已尝试解决此问题:

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

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

最佳答案

我最终在每个我想使其可见的目录中创建了一个虚拟文本文件,并对文件使用了 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/

相关文章:

未找到 Android L ViewAnimationUtils?

android - MediaStyle 通知未响应 RemoteControl 事件。

Android L(5.0)在eclipse中不搜索 “armeabi”或 "armeabi-v7a"文件夹(UnsatisfiedLinkError)中的原生库

AndroidHttpClient Nullpointerexception 调用 android.net.http.AndroidHttpClient.isMmsRequest

android - 在 Eclipse 中无法检测到 Sony Xperia

java - Dalvik 的 ASM 或 CGLIB 模拟

Java/安卓 : Return a class name through a method

android - adb 安装失败,出现错误 'INSTALL_FAILED_INSUFFICIENT_STORAGE'

android - 无法编译最新的 firebase 核心库

java - 如何在 web View 中单击 div 时完成 Activity