如何将文件写入Android中的外部公共存储,以便从Windows中可见它们?

2022-09-02 10:20:25

我的应用应将文件保存到一个位置,当您将手机/平板电脑连接到计算机时,您可以通过系统文件资源管理器查看它们。

这就是我实现文件写入的方式:

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

这是我在将索尼Xperia Z4平板电脑连接到Windows时看到的(注意缺少文档文件夹):

windows file explorer showing tablet contents

这是将文件写入的目录(使用上述实现):

android device monitor showing file system

我的实现有什么问题?


答案 1

我的实现有什么问题?

MediaStore尚未发现新创建的文件。你在 Windows 以及许多设备上的“库”应用中看到的内容都基于已编制索引的内容。MediaStore

使用及其方法来告诉文件,一旦您将数据写出到磁盘:MediaScannerConnectionscanFile()MediaStore

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

或者,在 Kotlin 中:

fun scanFile(ctxt: Context, f: File, mimeType: String) {
  MediaScannerConnection.scanFile(ctxt, arrayOf(f.getAbsolutePath()), arrayOf(mimeType), null)
}

答案 2

推荐