MediaScannerConnection # scanFile convierte directorios en archivos al acceder a ellos con USB-MTP en Android 5 Lollipop

Cambios como cambiar el nombre de un archivo disparado por una aplicación sólo aparecen en la interfaz USB-MTP después de reiniciar el dispositivo Android o después de registrar el nuevo archivo en el MediaScanner de esta manera (ver Trigger mediascanner en la ruta específica (carpeta), cómo? ):

file.renameTo(newFile); MediaScannerConnection.scanFile(context, new String[] { newFile.getAbsolutePath() }, null, null); 

USB-MTP se utiliza para acceder al almacenamiento de un dispositivo Android a través de USB. Por ejemplo, con el Explorador de Windows.

Sin embargo, con el Sony XPERIA Tablet Z (SGP321) en Android 5.0.2 (Build 10.6.A.0.454) las carpetas suministradas en newFile se convertirá en un archivo con 4KB. Ya no puedo acceder a la estructura de carpetas con el Explorador de Windows ya ni puedo copiar el archivo a mi computadora. Incluso después de reiniciar la tableta! El mismo dispositivo con Android 4.4.4 no muestra el comportamiento. Parece que sólo se ha roto la vista USB-MTP. La estructura de archivos a la que accede una aplicación para Android sigue luciendo bien.

Pregunta: ¿Es este comportamiento un error o lo implementé incorrectamente? ¿Cuál sería la implementación correcta?

Lo que he intentado hasta ahora para solucionar el problema:

  1. Mi solución actual es evitar scanFile para directorios.
  2. Puedo convertir archivos en directorios renombrándolos con una aplicación para Android sin MediaScannerConnection#scanFile . Después de reiniciar, puedo acceder al directorio con el Explorador de Windows de nuevo.
  3. Cambiar el nombre de los archivos con el Explorador de Windows que realmente son directorios no los restaura. Incluso después de reiniciar.
  4. Esta línea, tal como se sugiere en https://stackoverflow.com/a/21918085/433718 , no actualiza la vista USB-MTP, pero tampoco convierte los directorios en archivos:

     context.sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, Uri.fromFile(newFile.getParentFile())); 
  5. Tal vez relacionado:

    • Https://stackoverflow.com/a/27321544/433718
    • Uso del resolvedor de contenido para todo tipo de operaciones de archivo como suprimir un archivo en esta respuesta: Android Eliminación de archivos MediaScannerConnection

FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.