登录

去注册 忘记密码?

登录

注册

去登录

  • 扫码关注公众号
  • 发送“我爱安卓
  • 即可获取验证码

注册

解锁回答区域

  • 扫码关注公众号
  • 发送“我爱安卓

若你登陆,将永久解锁;
若未登录,仅本机解锁。

解锁回答区域

获取注册验证码

  • 扫码关注公众号
  • 发送“我爱安卓
  • 即可获取验证码

Jetpack Compose文件选择库

linpopopo   2023-07-23 22:31   收藏

FileSelector

这个库是用 Jetpack Compose 写的,主要为了完成文件选择功能。FileSelector 支持选择文件、文件夹和多选文件、文件夹,并且支持返回上一层目录

为什么会有这个库

通常在使用到 Jetpack Compose 的文件选择时都会使用 ActivityResultContracts,例如你要选择文件时可以使用 OpenDocument,选择文件夹时可以使用 OpenDocumentTree 等等。但是作者在平时的使用中却有一些不同的需求,例如我要在某个路径(外部存储Music目录等)下去选择某些文件(apk文件等),这些是 ActivityResultContracts 不能全部满足的。

如何使用这个库

FileSelector 是一个 Compose 函数,你可以将它放在任何 Compose 函数内,例如可以放到 Dialog 或者 Activity 布局下。

首先你要确保你有权限浏览你的路径。例如外部存储根目录时,Android 6.0 需要请求 WRITE_EXTERNAL_STORAGE 权限,Android 10 你可以设置 requestLegacyExternalStorage 节点,Android 11 以上你需要获取 ACTION_MANAGE_APP_ALL_FILES_ACCESS_PERMISSION 权限等等。Demo 为了方便起见只是将 targetSdk 设置成了29,并且使用了 accompanistpermissions 库请求权限。

FileSelector 函数需要传递 FileSelectorDataonClose 回调,onSelectedPaths 回调。

FileSelectorData 是一个数据类,rootPath 字段是你想选择的根目录;isSelectFile 是布尔值 表示选择文件还是文件夹,默认 true 选择文件,可以传 false 选择文件夹 ;isMultiple 是布尔值 表示是否多选,默认是 false 单选;fileType 表示你想要选择的文件后缀,例如选择 apk 文件就用 ".apk",仅当 isSelectFile= true 才有效。

data class FileSelectorData(
    val rootPath: String,
    val isSelectFile: Boolean = true,
    val isMultiple: Boolean = false,
    val fileType: String = ""
)

onClose 是一个函数类型的参数,当它点击关闭按钮是回调

onSelectedPaths 是一个函数类型的参数,当它点击确认按钮时回调,你可以在此拿到选择的文件或文件夹的集合。

截图

WX20230723-223122@2x.png
WX20230723-223409@2x.png

项目地址:https://github.com/linpopopo/FileSelector