¿Cómo escribir archivos en el almacenamiento público externo en Android para que sean visibles desde Windows?

Mi aplicación debe guardar los archivos en un lugar donde, cuando conecte su teléfono / tableta a una computadora, puede verlos a través del explorador de archivos del sistema.

Esta es la forma en que implementé la escritura de archivos:

protected String mDir = Environment.DIRECTORY_DOCUMENTS; protected File mPath = Environment.getExternalStoragePublicDirectory(mDir); protected void writeLogFile(String filename) { File f = new File(mPath, filename + ".txt"); f.getParentFile().mkdirs(); try (BufferedWriter bw = new BufferedWriter(new FileWriter(f, false))) { // Details omitted. } catch (Exception e) { e.printStackTrace(); return; } makeText("Wrote " + f.getAbsolutePath()); } 

Esto es lo que veo cuando conecto mi tableta Sony Xperia Z4 a Windows (observe la carpeta de documentos perdidos):

Explorador de archivos de Windows que muestra los contenidos de la tableta

Este es el directorio donde está escrito el archivo (usando la implementación anterior):

monitor de dispositivo Android que muestra el sistema de archivos

¿Qué pasa con mi implementación?

¿Qué pasa con mi implementación?

MediaStore aún no ha descubierto sus archivos recién creados. Lo que se ve en Windows, y en muchas aplicaciones de “galería” en el dispositivo, se basa en lo que MediaStore ha indexado.

Utilice MediaScannerConnection y su método scanFile() para informar a MediaStore sobre su archivo, una vez que haya escrito sus datos en el disco:

 public void scanFile(Context ctxt, File f, String mimeType) { MediaScannerConnection .scanFile(ctxt, new String[] {f.getAbsolutePath()}, new String[] {mimeType}, null); }