Как записать файлы во внешнее публичное хранилище в Android, чтобы они были видны из Windows?

Мое приложение должно сохранять файлы в том месте, где при подключении телефона / планшета к компьютеру их можно увидеть через проводник системных файлов.

Вот как я реализовал запись файлов:

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

Вот что я вижу, когда подключаю свой планшет Sony Xperia Z4 к Windows (обратите внимание на отсутствующую папку документов):

Проводник Windows, отображающий содержимое планшета

Это каталог, в который записан файл (используя вышеприведенную реализацию):

Монитор устройства Android показывает файловую систему

Что не так с моей реализацией?

1 ответ

Решение

Что не так с моей реализацией?

MediaStore еще не обнаружил ваши вновь созданные файлы. То, что вы видите в Windows - и во многих приложениях "галереи" на устройстве - основано на том, что MediaStore проиндексировал.

использование MediaScannerConnection И его scanFile() способ рассказать MediaStore о вашем файле, как только вы записали свои данные на диск:

public void scanFile(Context ctxt, File f, String mimeType) {
    MediaScannerConnection
        .scanFile(ctxt, new String[] {f.getAbsolutePath()},
                  new String[] {mimeType}, null);
}
Другие вопросы по тегам