Как записать файлы на внешнее общедоступное хранилище на 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);
}
или в Котлине:
fun scanFile(ctxt: Context, f: File, mimeType: String) {
MediaScannerConnection.scanFile(ctxt, arrayOf(f.getAbsolutePath()), arrayOf(mimeType), null)
}