Marshmallow (6.0.1) 上缺少由我的应用程序创建的文件夹

A folder created by my app is missing on Marshmallow (6.0.1)

在我的 android-app 中,我在设备的内部存储器上创建了一个文件夹。 当我浏览内部存储时,我可以看到文件夹及其内容。

当我将设备连接到我的电脑并打开内部存储时,该文件夹丢失了。所有其他文件夹都可用,但我从我的应用程序创建的文件夹不可用。

我尝试为我的 windows 打开 "show invisible files",但文件夹仍然丢失。有什么建议吗?

我尝试使用 Vijai 的回答中的 MediaScannerConnection.scanFile。在此之后,我可以看到该文件,但不显示为目录。双击它没有任何反应。

文件夹本身是由我的数据库管理员创建的。它是 SQLiteOpenHelper-class 的扩展class。

private DatabaseManager(Context context) {
    super(context, DATABASE_NAME, null, DATABASE_VERSION); //DATABASE_NAME = Environment.getExternalStorageDirectory() + File.separator + "[Name of my directorie]" + File.separator + "[Name of my db].DB";
    mContext = context;
    getWritableDatabase();
}

长期以来一直运行良好。我过去能看到目录。由于我的客户将他的 phone 更改为 android 6.0.1,因此该文件不再可见。

要扫描文件夹中的所有文件,您可以构建一个包含文件路径的字符串数组并将其传递给 mediascanner 的 scanFile() 方法。

if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED) {

    File dir = new File(Environment.getExternalStorageDirectory(), "yourdirectory");

    // Create empty directory and its missing parent directories
    dir.mkdirs();

    if (dir.exists())
        MediaScannerConnection.scanFile(this, buildFilePaths(dir), null, null);
}

private String[] buildFilePaths(File directory){
    File[] files = directory.listFiles();
    ArrayList<String> filePaths = new ArrayList();
    for (File file : files)
        filePaths.add(file.getAbsolutePath());
    return filePaths.toArray(new String[filePaths.size()]);
}

-----原答案-----

您必须重新扫描存储以显示目录(android 每隔一段时间或在启动期间扫描整个系统介质)

if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED) {

    File dir = new File(Environment.getExternalStorageDirectory(), "yourdirectory");

    // Create empty directory and its missing parent directories
    dir.mkdirs();

    if (dir.exists())
        MediaScannerConnection.scanFile(this, new String[] {dir.toString()}, null, null);
}

p.s: MTP 模式很烂!