AndroidFilePicker

by rosuH

FilePicker is a small and fast file selector framework that is constantly evolving with the goal of ...

470 Stars 49 Forks Last release: about 1 month ago (0.6.6-x) MIT License 142 Commits 38 Releases

Available items

No Items, yet!

The developer of this repository has not created any items for sale yet. Need a bug fixed? Help with integration? A different license? Create a request here:

Banner

Android File Picker🛩️

中文简体

Well, it doesn't have a name like Rocky, Cosmos or Fish. Android File Picker, like its name, is a local file selector framework. Some of his characteristics are described below:

  • Launcher in Activity or Fragment
    • Start with a single line of code
  • Browse and select all files in local storage
    • Custom Root path to start
    • Built-in default file type and file discriminator
    • Or you can implement the file type yourself
  • Built in Single Choice mode and Multiple Choice mode.
  • Custom list filter
    • Just want to show pictures(Or videos, audio...)? No problem!
    • Of course, you can just display the folder
  • Custom item click event: only need to implement the listener
  • Apply different themes, including four built-in themes and custom themes
  • More to find out yourself

| Rail Style(default) | Reply Style | Crane Style | Shrine Style | | :----------------------------------------------------------: | :----------------------------------------------------------: | :----------------------------------------------------------: | :----------------------------------------------------------: | | | | | |

Compatibility

It depends on your targetAPI: -

targetAPI <= 28
, you are fine ;) -
targetAPI == 29
, please enable
requestLegacyExternalStorage
feature for your project :D -
targetAPI >= 30
, don't use this lib. We don't support scope storage for now :( - Unless Google release new external permission or other new feature, we would not consider support scope storage. (or says: "I can't do this") - Or, ofcouse, you are welcome for give us some ideas. Just create a new issues.

Download

Gradle:

In your project

build.gradle
:
allprojects {
    repositories {
        ...
        maven { url 'https://jitpack.io' }
    }
}

In your module

build.gradle
:
dependencies {
    implementation 'me.rosuh:AndroidFilePicker:$latest_version'
}

This lib now support AndroidX, check the version below.

Check out releases page to see more versions.

Usage 📑

Permission

The library requires two permissions:

  • android.permission.READ_EXTERNAL_STORAGE
  • android.permission.WRITE_EXTERNAL_STORAGE

If you do not have permission to apply, this framework will check and apply at startup.

Launch 🚀 (Kotlin)

FilePickerManager
        .from([email protected])
        .forResult(FilePickerManager.REQUEST_CODE)

Now that you have taken off 🛩️ ... ( there are really only two lines )

You only need to add

.INSTANCE
to use it:
FilePickerManager.INSTANCE
                .from(this)
                .forResult(FilePickerManager.REQUEST_CODE);

Receive Result

In

onActivityResult()
callback of the starting
Activity
or
Fragment
:
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
    when (requestCode) {
        FilePickerManager.instance.REQUEST_CODE -> {
            if (resultCode == Activity.RESULT_OK) {
                val list = FilePickerManager.instance.obtainData()
                // do your work
            } else {
                Toast.makeText([email protected], "You didn't choose anything~", Toast.LENGTH_SHORT).show()
            }
        }
    }
}

The result is a path list of the selected file (

ArrayList()
).

proguard-rules(For pre v0.5.1)

-keepnames class kotlinx.coroutines.internal.MainDispatcherFactory {}
-keepnames class kotlinx.coroutines.CoroutineExceptionHandler {}
-keepnames class kotlinx.coroutines.android.AndroidExceptionPreHandler {}
-keepnames class kotlinx.coroutines.android.AndroidDispatcherFactory {}

-keepclassmembernames class kotlinx.** { volatile ; }

Starting with 0.5.2, we removed the coroutine library and implemented it using native threads, so there is no need to add proguard-rules.

Docs


Special Thanks To:

We use cookies. If you continue to browse the site, you agree to the use of cookies. For more information on our use of cookies please see our Privacy Policy.