2015-09-25 3 views
6

Meine App sollte Dateien an einem Ort speichern, an dem Sie, wenn Sie Ihr Telefon/Tablet an einen Computer anschließen, diese über den Systemdatei-Explorer sehen können.Wie schreibe ich Dateien in externen öffentlichen Speicher in Android, so dass sie von Windows aus sichtbar sind?

Dies ist die Art, wie ich das Schreiben von Dateien implementiert:

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()); 
} 

Das ist das, was ich sehe, wenn ich meine Sony Xperia Z4 Tablet auf Windows (Hinweis fehlende Dokumente Ordner) verbinden:

windows file explorer showing tablet contents

Dies ist das Verzeichnis, in das die Datei geschrieben wird (unter Verwendung der obigen Implementierung):

android device monitor showing file system

Was ist falsch an meiner Implementierung?

Antwort

11

Was ist falsch an meiner Implementierung?

MediaStore hat Ihre neu erstellten Dateien noch nicht gefunden. Was Sie in Windows — und in vielen on-Device "Galerie" -Apps — sehen, basiert auf was MediaStore indexiert hat.

Verwendung MediaScannerConnection und seine scanFile() Methode MediaStore über Ihre Datei zu sagen, wenn Sie Ihre Daten auf die Platte geschrieben haben aus:

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

Danke, das funktioniert. Ich denke wirklich, dass sie diese Informationen in die [offizielle Dokumentation] aufnehmen sollten (http://developer.android.com/guide/topics/data/data-storage.html). Ich nehme an, dass der MediaStore diese Dateien irgendwann selbst finden würde? –

+0

@ Transporter_Raum_3: Ja. Es gibt eine kleine Ausgabe des Googlebot, die regelmäßig externen Speicher scannt, sowie bei Neustarts, um das 'MediaStore'-Verzeichnis von Dateien zu aktualisieren. Die Datei würde schließlich angezeigt werden. – CommonsWare

Verwandte Themen