我怎样才能得到一个包含视频的所有目录的列表?

How can I get a listing of all directories with videos on them?

使用 Android ContentResolver 我可以获得一个 Cursor 给我视频文件,效果很好,但我看到很多应用程序按目录分隔媒体.

他们如何在不循环 cursor returns 的所有项目的情况下找出哪些目录有媒体?或者这是唯一的方法吗?

谢谢。

编辑:为了清楚起见,我已经有了查询所有视频、遍历每个视频并提取目录的代码。这是唯一的方法,这似乎很愚蠢。

您正在寻找的解决方案是 android only.You 提供的 FileNameFilter 库,可以这样做

File[] jpgfiles = f.listFiles(new FileFilter() {
        @Override
        public boolean accept(File file)
        {
        return(file.getPath().endsWith(".mp4")||file.getPath().endsWith(".webm"));
        }
        });

// 编辑代码//

File musicDirectory = new File( getExternalFilesDir(Environment.DIRECTORY_MUSIC));

// 希望这个是你要找的 //

您可以像其他视频文件一样放置不同的文件管理器 extentions.I 喜欢添加任何没有媒体文件的目录具有文件名 .nomedia 文件,这也很有用。

我已经测试过了。

来自 github 的参考。

fun getPathList(): Array<String> {
        val uri = MediaStore.Video.Media.EXTERNAL_CONTENT_URI
        val projection = arrayOf(MediaStore.Video.VideoColumns.DATA)
        val cursor = this.contentResolver.query(uri, projection, null, null, null)
        val pathArrList = ArrayList<String>()

        cursor?.let {
            while (it.moveToNext()) {
                pathArrList.add(it.getString(0))
            }
            it.close()
        }
        return pathArrList.toTypedArray()
    }

目前没有办法在不循环的情况下直接从游标结果转到列表。游标在设计上是惰性的,没有本地地图功能。 Anko 提供了一个 parseList 来抽象循环(并关闭游标)并且 return 你想要的列表。

关于原始问题。由于内容可以存在于多个 Uri 桶中(文档、下载等),因此没有一个 Uri 来整理结果。不过,您也许可以在查询中加入 Uris?