Charles is a local file selector for Android. You can
- Use it in Activity or Fragment
- Select multi-media file including images, videos, audio and documents
- Apply different themes, including two built-in themes and custom themes
- Restrict different screen orientations
- Find more by yourself
| Charles Style | Charles Dark Style | Empty View |
|---|---|---|
![]() |
![]() |
![]() |
- Add the JitPack repository to your build file:
allprojects {
repositories {
jcenter()
}
}- Add the dependency:
dependencies {
implementation 'io.github.tonnyl:charles:x.y.z'
}If you use Glide as your image engine, add rules as Glide's README says. And add extra rule:
-dontwarn com.squareup.picasso.**If you use Picasso as your image engine, add rules as Picasso's README says. And add extra rule:
-dontwarn com.bumptech.glide.**Attention: The above progurad rules are correct.
The library requires two permissions:
android.permission.READ_EXTERNAL_STORAGEandroid.permission.WRITE_EXTERNAL_STORAGE
So if you are targeting Android 6.0+, you need to handle runtime permission request before next step.
Start CharlesActivity from current Activity or Fragment:
Charles.from(this@MainActivity)
.choose()
.maxSelectable(9)
.progressRate(true)
.theme(R.style.Charles)
.imageEngine(GlideEngine())
.restrictOrientation(ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED)
.forResult(REQUEST_CODE_CHOOSE)There are two built-in themes you can use to start CharlesActivity:
R.style.Charles(light mode)R.style.CharlesDark(dark mode)
And Also you can define your own theme as you wish.
In onActivityResult() callback of the starting Activity or Fragment:
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
super.onActivityResult(requestCode, resultCode, data)
if (requestCode == REQUEST_CODE_CHOOSE && resultCode == Activity.RESULT_OK) {
val uris = Charles.obtainResult(data)
val paths = Charles.obtainPathResult(data)
Log.d("charles", "uris: $uris")
Log.d("charles", "paths: $paths")
}
}Find more details about Charles in wiki.
Discussions and pull requests are welcomed 💖.
This library is inspired by Matisse and uses some of its source code.
Charles is under the MIT license. See the LICENSE for more information.


