Marshmallow(6.0.1)

时间:2018-02-13 11:37:55

标签: android android-internal-storage

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

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

我试图打开"显示不可见的文件"对于我的窗户,但文件夹仍然缺失。有什么建议吗?

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

enter image description here

该文件夹本身由我的databasemanager创建。它是SQLiteOpenHelper类的扩展类。

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

这种情况很好。我能够看到过去的目录。由于我的客户将手机更改为Android 6.0.1,因此该文件不再可见。

1 个答案:

答案 0 :(得分:2)

要扫描文件夹中的所有文件,您可以构建一个包含文件路径的String数组,并将其传递给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模式很糟糕!