|
1 | 1 |  |
2 | 2 |
|
3 | | -# AndroidFilePicker |
| 3 | +# Android File Picker🛩️ |
4 | 4 |
|
5 | 5 | [](https://jitpack.io/#me.rosuh/AndroidFilePicker) |
6 | 6 |
|
| 7 | +如果你使用的是 `1.x` 版本,请查看 [README_0.x](./README_CN_0.x.md) 文件。 |
7 | 8 |
|
| 9 | +它没有像 Rocky、Cosmos 或 Fish 这样的名字。Android File Picker,正如其名,是一个本地文件选择框架。以下是它的一些特点: |
8 | 10 |
|
9 | | -它没有像 Rocky,Cosmos 或是 Peppa 这样的名字。 Android File Picker 正如其名,是一个本地文件选择器框架。 他的一些特征如下所述: |
10 | | - |
11 | | -- 在 `Activity` 或 `Fragment` 中启动 |
12 | | - - 从一行代码开始 |
13 | | -- 浏览本地存储中的所有文件 |
14 | | - - 内置默认文件类型和文件鉴别器 |
15 | | - - 或者您可以自己实现文件类型 |
16 | | -- 内置了单选模式和多选模式 |
| 11 | +- 在 Activity 或 Fragment 中启动 |
| 12 | + - 一行代码启动 |
| 13 | +- 浏览和选择本地存储中的所有文件 |
| 14 | + - 自定义根路径开始 |
| 15 | + - 内置默认文件类型和文件区分器 |
| 16 | + - 或者你可以自己实现文件类型 |
| 17 | +- 内置单选模式和多选模式。 |
17 | 18 | - 自定义列表过滤器 |
18 | | - - 只想显示图片(或视频,音频......)? 没问题! |
19 | | - - 当然,您也可只显示文件夹 |
20 | | -- 自定义`item`点击事件:只需要实现监听器 |
21 | | -- 四个内置主题和自定义主题 |
22 | | -- 还有更多待您自己探索的特性(?) |
23 | | - |
24 | | - |
| 19 | + - 只想显示图片(或视频、音频...)?没问题! |
| 20 | + - 当然,你也可以只显示文件夹 |
| 21 | +- 自定义条目点击事件:只需实现监听器 |
| 22 | +- 应用不同的主题,包括四个内置主题和自定义主题 |
| 23 | +- 更多功能等你发现 |
25 | 24 |
|
26 | | -| Rail Style(default) | Reply Style | Crane Style | Shrine Style | |
| 25 | +| Rail | Reply | Crane | Shrine | |
27 | 26 | | :----------------------------------------------------------: | :----------------------------------------------------------: | :----------------------------------------------------------: | :----------------------------------------------------------: | |
28 | 27 | |  |  |  |  | |
29 | 28 |
|
30 | 29 | ## 版本兼容性 |
31 | | -这取决于您的 targetAPI : |
| 30 | +取决于你的 targetAPI。 |
32 | 31 |
|
33 | | -- `targetAPI <= 28`,完全没有问题 ;) |
34 | | -- `targetAPI == 29`,请为您的项目启用 `requestLegacyExternalStorage` 特性:D |
35 | | -- `targetAPI == 29` |
36 | | - - 当运行于 Android 11以及以上的平台时,仅可以读取媒体文件(图片、音视频),除此均无法访问(比如PDF文档、apk 二进制文件等) |
| 32 | +- `targetAPI > 33`,也许你正在寻找 [照片选择器](https://developer.android.com/about/versions/14/changes/partial-photo-video-access?hl=zh-cn#media-reselection) |
| 33 | +- `targetAPI == 33` |
| 34 | + - 处理[媒体权限](https://developer.android.com/training/data-storage/shared/media#access-other-apps-files)由你自己处理 |
| 35 | + - 此库将仅显示你的应用有权限访问的媒体文件 |
| 36 | +- `targetAPI <= 33` |
| 37 | + - 在你的 `AndroidManifest.xml` 文件中设置 `android:requestLegacyExternalStorage="true"` |
| 38 | + - 由你自己处理 `android.permission.READ_EXTERNAL_STORAGE` 权限 |
| 39 | + - 此库将显示存储中的所有文件 |
37 | 40 |
|
38 | | -请参看 issue: [All About Scope Storage. ](https://github.com/rosuH/AndroidFilePicker/issues/146) |
39 | | -## 下载使用 |
| 41 | +## 下载 |
40 | 42 |
|
41 | | -1. 在你的项目中添加依赖 |
| 43 | +[Gradle](https://docs.jitpack.io/android/#installing): |
42 | 44 |
|
43 | | -现在项目 `build.gradle` 配置文件添加仓库: |
| 45 | +在项目的 `build.gradle` 文件中: |
44 | 46 |
|
45 | | -```xml |
46 | | -allprojects { |
| 47 | +```gradle |
| 48 | +dependencyResolutionManagement { |
| 49 | + repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS) |
47 | 50 | repositories { |
48 | | - ... |
49 | | - maven { url 'https://jitpack.io' } |
| 51 | + google() |
| 52 | + mavenCentral() |
| 53 | + maven { url 'https://jitpack.io' } |
50 | 54 | } |
51 | 55 | } |
52 | | -``` |
| 56 | +在模块的 build.gradle 文件中: |
53 | 57 |
|
54 | | -然后在子模块(`app`)的配置文件添加依赖: |
55 | | - |
56 | | -```xml |
| 58 | +```gradle |
57 | 59 | dependencies { |
58 | | - implementation 'me.rosuh:AndroidFilePicker:latest_version' |
59 | | -} |
60 | | -``` |
61 | | - |
62 | | -`latest_version` 请自行替换成 [最新版本](https://github.com/rosuH/AndroidFilePicker/releases) |
63 | | - |
64 | | - |
65 | | - |
66 | | -## 使用 |
67 | | - |
68 | | -### 权限 |
69 | | - |
70 | | -此库需要一个权限: |
71 | | - |
72 | | -- `android.permission.READ_EXTERNAL_STORAGE` |
73 | | - |
74 | | -如果您没有提前授予,这个库会自动申请该权限的。 |
75 | | - |
76 | | -### 开始使用 |
77 | | - |
78 | | -简单的链式调用示意: |
79 | | - |
80 | | -```kotlin |
81 | | -FilePickerManager |
82 | | - .from(context) |
83 | | - .forResult(FilePickerManager.REQUEST_CODE) |
84 | | -``` |
85 | | - |
86 | | -现在你已经起飞了🛩️...(真的只有两行) |
87 | | - |
88 | | - |
89 | | -### 获取结果 |
90 | | - |
91 | | -*获取结果*:`onActivityResult`接受消息,然后调用`FilePickerManager.obtainData()`获取保存的数据,**结果是所选取文件的路径列表(`ArrayList<String>()`)** |
92 | | - |
93 | | -```kotlin |
94 | | -override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { |
95 | | - when (requestCode) { |
96 | | - FilePickerManager.instance.REQUEST_CODE -> { |
97 | | - if (resultCode == Activity.RESULT_OK) { |
98 | | - val list = FilePickerManager.instance.obtainData() |
99 | | - // do your work |
100 | | - } else { |
101 | | - Toast.makeText(this@SampleActivity, "没有选择任何东西~", Toast.LENGTH_SHORT).show() |
102 | | - } |
103 | | - } |
104 | | - } |
| 60 | + implementation 'me.rosuh:AndroidFilePicker:$latest_version' |
105 | 61 | } |
106 | | -``` |
107 | | - |
108 | | -### 更多示例 |
109 | | - |
110 | | -来翻翻我写的[飞行手册](https://github.com/rosuH/AndroidFilePicker/wiki)吧? |
111 | | - |
112 | | -或者想看看[主题配色](https://github.com/rosuH/AndroidFilePicker/wiki/3.-%E9%85%8D%E7%BD%AE%E9%80%89%E9%A1%B9#2-%E4%B8%BB%E9%A2%98%E5%B1%95%E7%A4%BA)? |
113 | | - |
114 | | -## 功能 & 特点 |
115 | | - |
116 | | -1. 链式调用 |
117 | | -2. 默认选中实现 |
118 | | - - 点击条目(`item`)无默认实现 |
119 | | - - 点击`CheckBox`为选中 |
120 | | - - 长按条目为更改选中状态:选中/取消选中 |
121 | | -3. 内置四种主题配色 + 可自定义配色 |
122 | | - - 查看主题颜色示意图,然后调用`setTheme()`传入自定义主题 |
123 | | -4. 默认实现多种文件类型 |
124 | | - - 实现`IFileType`接口来实现你的文件类型 |
125 | | - - 实现`AbstractFileType`抽象类来实现你的文件类型甄别器 |
126 | | -5. 公开文件过滤接口 |
127 | | - - 实现`AbstractFileFilter`抽象类来定制你自己的文件过滤器,这样可以控制文件列表的展示内容 |
128 | | -6. 多种可配置选项 |
129 | | - 1. 选中时是否忽略文件夹 |
130 | | - 2. 是否显示隐藏文件夹(以符号`.`开头的,视为隐藏文件或隐藏文件夹) |
131 | | - 3. 可配置导航栏的文本,默认显示、多选文本、取消选择文本以及根目录默认名称 |
132 | | -7. 公开条目(`item`)选择监听器,可自定义条目被点击的实现 |
133 | | - |
134 | | -## 其他 |
135 | | - |
136 | | -- [部分源码说明](https://github.com/rosuH/AndroidFilePicker/wiki/%E9%83%A8%E5%88%86%E6%BA%90%E7%A0%81%E8%AF%B4%E6%98%8E)。 |
137 | | - |
138 | | -- [更新日志](https://github.com/rosuH/AndroidFilePicker/wiki/Change-Log) |
139 | | - |
140 | | -- [TODO](https://github.com/rosuH/AndroidFilePicker/wiki/TODO) |
141 | | - |
142 | | - |
143 | | - |
144 | | ---- |
145 | | - |
146 | | -## Special Thanks To: |
147 | | - |
148 | | -- [*1 @whichName](https://github.com/whichname) |
149 | | -- [BRVAH](https://github.com/CymChad/BaseRecyclerViewAdapterHelper) |
150 | | -- [Matisse](https://github.com/zhihu/Matisse) |
151 | | -- [默认图标作者 Shulk](http://iconfont.cn/collections/detail?spm=a313x.7781069.1998910419.d9df05512&cid=11271) |
152 | | -- [主题配色](https://material.io/design/material-studies/about-our-material-studies.html) |
153 | | -- [Empty icon](https://github.com/rosuH/AndroidFilePicker/blob/master/filepicker/src/main/res/drawable/ic_empty_file_list_file_picker.xml) made by [freepik](https://www.freepik.com/) from www.flaticon.com |
| 62 | +``` |
0 commit comments