Skip to content

Repository files navigation

FileBrowser

A FileBrowser / FileChooser for Android that you can integrate to your app to browse/select files from internal/external storage.

Android Arsenal

Using Maven

<dependency>
<groupId>com.adityak</groupId>
<artifactId>browsemyfiles</artifactId>
<version>1.9</version>
<type>pom</type>
</dependency>

Or Using Gradle

compile 'com.adityak:browsemyfiles:1.9'

It easily integrates with your app's color scheme. You can change the color scheme using the following in your styles.xml

<itemname="colorPrimary">@color/colorPrimary</item>
<itemname="colorPrimaryDark">@color/colorPrimaryDark</item>
<itemname="colorAccent">@color/colorAccent</item>
<itemname="android:actionModeBackground">@color/actionModeToolbar</item>

There are 3 main classes to use the library.

  1. FileBrowser - Used to just Browse files in storage (has all file IO features)
  2. FileChooser - Used to select single/multiple files in storage (has some IO features)
  3. FolderChooser - Used to select single/multiple folders in storage (has some IO features)
  4. FileBrowserWithCustomHandler - Used to run custom code when files are selected (has all IO features)

1. FileBrowser

Use following Intent to start the FileBrowser

Intenti4 = newIntent(getApplicationContext(), FileBrowser.class);
startActivity(i4);

2. FileChooser

Use following Intent to start the FileChooser

  • For Single Selection
Intenti2 = newIntent(getApplicationContext(), FileChooser.class);
i2.putExtra(Constants.SELECTION_MODE, Constants.SELECTION_MODES.SINGLE_SELECTION.ordinal());
startActivityForResult(i2, PICK_FILE_REQUEST);

To get the selected file, In your calling activity's onActivityResult method, use the following

if (requestCode == PICK_FILE_REQUEST && data!=null) {
if (resultCode == RESULT_OK) {
Urifile = data.getData();
}
}
  • For Multiple Selection
Intenti2 = newIntent(getApplicationContext(), FileChooser.class);
i2.putExtra(Constants.SELECTION_MODE, Constants.SELECTION_MODES.MULTIPLE_SELECTION.ordinal());
startActivityForResult(i2, PICK_FILE_REQUEST);

To get the selected file, In your calling activity's onActivityResult method, use the following

if (requestCode == PICK_FILE_REQUEST && data!=null) {
if (resultCode == RESULT_OK) {
ArrayList<Uri> selectedFiles = data.getParcelableArrayListExtra(Constants.SELECTED_ITEMS);
}
}

3. FolderChooser

Use following Intent to start the FolderChooser

  • For Single Selection
Intenti2 = newIntent(getApplicationContext(), FolderChooser.class);
i2.putExtra(Constants.SELECTION_MODE, Constants.SELECTION_MODES.SINGLE_SELECTION.ordinal());
startActivityForResult(i2, PICK_FOLDER_REQUEST);

To get the selected folder, In your calling activity's onActivityResult method, use the following

if (requestCode == PICK_FOLDER_REQUEST && data!=null) {
if (resultCode == RESULT_OK) {
Urifile = data.getData();
}
}
  • For Multiple Selection
Intenti2 = newIntent(getApplicationContext(), FolderChooser.class);
i2.putExtra(Constants.SELECTION_MODE, Constants.SELECTION_MODES.MULTIPLE_SELECTION.ordinal());
startActivityForResult(i2, PICK_FOLDER_REQUEST);

To get the selected file, In your calling activity's onActivityResult method, use the following

if (requestCode == PICK_FOLDER_REQUEST && data!=null) {
if (resultCode == RESULT_OK) {
ArrayList<Uri> selectedFiles = data.getParcelableArrayListExtra(Constants.SELECTED_ITEMS);
}
}

4. FileBrowserWithCustomHandler

Register a Broadcast receiver and handle the onReceive method like below

publicclassFileSelectedBroadCastReceiverextendsBroadcastReceiver {
@OverridepublicvoidonReceive(Contextcontext, Intentintent) {
UrifilePath = intent.getParcelableExtra(com.aditya.filebrowser.Constants.BROADCAST_SELECTED_FILE);
}
}

Register the receiver like the following snippet

 <receiverandroid:name=".FileSelectedBroadCastReceiver"android:exported="false"android:enabled="true">
<intent-filter>
<actionandroid:name="com.adityak.filebrowser.FILE_SELECTED_BROADCAST" />
</intent-filter>
</receiver>

If you also need some other parameters to be sent with the broadcast use the following when creating the activity

Intenti = newIntent(mContext, FileBrowserWithCustomHandler.class);
Bundleib = newBundle();
//add extrasi.putExtras(ib);
startActivity(i);

and in the broadcast receiver use the following to get the extras

Bundleb = intent.getExtras()

To load a particular directory instead of the normal root directory

Add the following in the intent

Intenti = newIntent(this, FileBrowser.class); //works for all 3 main classes (i.e FileBrowser, FileChooser, FileBrowserWithCustomHandler)i.putExtra(Constants.INITIAL_DIRECTORY, newFile(Environment.getExternalStorageDirectory().getAbsolutePath(),"Movies").getAbsolutePath());

To list only the files with a particular extension

Add the following in the intent

Intenti = newIntent(this, FileBrowser.class); //works for all 3 main classes (i.e FileBrowser, FileChooser, FileBrowserWithCustomHandler)i.putExtra(Constants.ALLOWED_FILE_EXTENSIONS, "mkv;mp4;avi");

Use file extensions delimited by semicolon

Known Issues

Currently folder size is calculated using Java's Api getTotalSpace() which gives the size of the partition of the path which may not always give the desired result. To get the exact size, properties can be used which gives the exact result. If Exact size is to be known, then UI would lag as it would take some time to calculate size - Fix for this is postponed

If you have any questions/queries/Bugs/Hugs please mail @ adityak368@gmail.com

About

A FileBrowser / FileChooser / FolderChooser for Android that you can integrate to your app to browse/select files from internal/external storage

Topics

Resources

Stars

174 stars

Watchers

6 watching

Forks

Releases

Packages

Contributors

Languages