# 媒体文件扫描

媒体文件扫描通过两种方式进行扫描 **File**、**MediaStore**, 可通过**MediaQueryConfig.kt**指定扫描的配置选项

## - FileStore
通过File listFiles进行扫描文件
```
    FileStore.query(dir ： String, config : MediaQueryConfig) : List<MediaBean>
```

## - MediaStore
通过MediaStore Api进行文件扫描
```
    MediaStore.query(dir : String, config : MediaQueryConfig) : List<MediaBean>
```

## - MediaQueryConfig
支持的配置选项如下：
- 排序方式
- 排序类型
- 忽略要查询路径下的文件或文件夹
- 指定查询的文件格式
- 结果中是否包含文件夹(仅FileStore有效)
- 递归所有文件夹（仅FileStore可配置false, MediaStore递归所有)
- 分页配置(仅MediaStore有效)
```
data class MediaQueryConfig{
    //升序、降序
    var order : MediaSortOrder = MediaSortOrder.DESC

    //排序方式
    var sortType : MediaSortType = MediaSortOrder.DATE

    //忽略的子文件夹、文件
    ignoreChildFiles : List<File> = mutableListOf()

    //支持的文件格式，默认空为不限制，查询所有格式 png,jpg,pdf...
    var supportMimeTypes : List<String> = mutableListOf()

    //结果是否包含文件夹，仅FileStore生效
    includeFolder : Boolean = false

    //遍历子文件夹内容，仅FileStore生效
    //MediaStore默认遍历子文件夹所有文件，配置不生效
    var recursively : Boolean = false

    //分页配置，仅MediaStore查询生效
    var page : Page = Page()
}

//pageSize 如果为Int.MAX_VALUE 不进行分页，直接查询所有
data class Page(
    var pageNum : Int = 1,
    var pageSize : Int = Int.MAX_VALUE
)
```

## - MediaBean
```
data class MediaBean(
    var mediaPath : String,//媒体文件路径
    var name : String, //文件名称
    var extension : String, //文件格式
    var isFile : Boolean, //是否是文件
    var lastModified : Long, //最后修改时间
    var parentPath : String, //父文件夹路径
    var length : Long, //文件大小
    var uri : Uri? = null, //媒体文件Uri
)

```

