保存到下载文件夹的文件不会显示在“下载”应用程序中

ale*_*mix 4 android android-mediascanner android-external-storage

我正在尝试将文件保存到下载文件夹。我获取目录并使用如下方式保存文件:

File exportDir = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS), "");
if (!exportDir.exists()) {
    exportDir.mkdirs();
}
File file = new File(exportDir, "filename.csv");
try {
    if (file.exists()) {
        // if the file exists create new file will do nothing. We want to
        // overwrite contents every time
        file.delete();
    }
    boolean created = file.createNewFile();
    if (!created) {
        Log.d("", "Failed to create file");
    }

    // .. write to file

    MediaScannerConnection.scanFile(activity, new String[]{exportDir.getPath()}, null, null);
} catch (Exception sqlEx) {
    Log.e("MainActivity", sqlEx.getMessage(), sqlEx);
}
Run Code Online (Sandbox Code Playgroud)

我在三台设备上对此进行了测试:

  • 一加 3(安卓 8.0.0)
  • 蓝光高级 5.0(安卓 5.1)
  • 三星 Galaxy S3(安卓 4.4.4)

在所有设备上,如果我导航到 /storage/sdcard0/Download 或类似的位置,我可以在那里看到我的文件。但是,如果我尝试打开本机“下载”应用程序,我无法在 Blu 或 Galaxy 上看到该文件,但可以在 OnePlus 3 上看到它。

我尝试重新启动手机以触发媒体扫描,并尝试使用它MediaScannerConnection.scanFile来扫描文件和文件夹,但没有成功。根据 FileManager 的说法,该文件就像-rw-rw----该文件夹中的大多数其他文件一样,那么这里发生了什么?

我的目标是将文件保存到一个合理的位置,用户可以轻松找到它并将其从手机中取出。下载文件夹有特殊规则吗?

任何建议,将不胜感激。

Com*_*are 6

\n

下载文件夹有特殊规则吗?

\n
\n

外部存储上的文件Downloads/夹没有。下载应用程序可以。经典的“下载”应用程序适用于通过 下载的文件DownloadManager,但设备制造商可以根据自己的需要进行修改。

\n
\n

我的目标是将文件保存到一个合理的位置,用户可以轻松找到它并将其从手机中取出。

\n
\n

Downloads/\xe2\x80\x94 可能是也可能不是最好的地方,对于用户没有明确从应用程序下载的东西来说,这不是我的第一选择。

\n

2023-07-29 更新:现在存储规则非常复杂。ACTION_CREATE_DOCUMENT我强烈建议您让用户通过/ActivityResultContracts.CreatedDocumentACTION_OPEN_DOCUMENT_TREE/选择保存内容的位置ActivityResultContracts.OpenDocumentTree

\n