
Angad Singh (@angads25)
Benchmark:
- Easy to Implement.
- No permissions required.
- Files, Directory Selection.
- Single or Multiple File selection.
-
Library is also Available in MavenCentral, So just put this in your app dependencies to use it:
compile 'com.github.angads25:filepicker:1.0.6 '
-
Start by creating an instance of DialogProperties.
DialogProperties properties=new DialogProperties();
Now 'DialogProperties' has certain parameters.
-
Assign values to each Dialog Property using DialogConfig class.
properties.selection_mode=DialogConfigs.SINGLE_MODE; properties.selection_type=DialogConfigs.FILE_SELECT; properties.root=new File(DialogConfigs.DEFAULT_DIR); properties.error_dir=new File(DialogConfigs.DEFAULT_DIR); properties.extensions=null;
-
Next create an instance of FilePickerDialog, and pass Context and DialogProperties references as parameters. Optional: You can change the title of dialog. Default is current directory name.
FilePickerDialog dialog = new FilePickerDialog(MainActivity.this,properties); dialog.setTitle("Select a File");
-
Next, Attach DialogSelectionListener to FilePickerDialog as below,
dialog.setDialogSelectionListener(new DialogSelectionListener() { @Override public void onSelectedFilePaths(String[] files) { //files is the array of the paths of files selected by the Application User. } });
An array of paths is returned whenever user press the select button`.
-
Use dialog.show() method to show dialog.
Marshmallow and further requests for the permission on runtime. You should overrideonRequestPermissionsResult in Activity/AppCompatActivity class and show the dialog only if permissions have been granted.
//Add this method to show Dialog when the required permission has been granted to the app. @Override public void onRequestPermissionsResult(int requestCode,@NonNull String permissions[],@NonNull int[] grantResults) { switch (requestCode) { case FilePickerDialog.EXTERNAL_READ_PERMISSION_GRANT: { if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) { if(dialog!=null) { //Show dialog if the read permission has been granted. dialog.show(); } } else { //Permission has not been granted. Notify the user. Toast.makeText(MainActivity.this,"Permission is Required for getting list of files",Toast.LENGTH_SHORT).show(); } } } }
That's It. You are good to go further.FilePickerPreference
-
Start by declaring FilePickerPreference in your settings xml file as:
-
Implement Preference.OnPreferenceChangeListener to class requiring selected values and OverrideonPreferenceChange(Preference, Object) method. Check for preference key using Preference reference.
@Override public boolean onPreferenceChange(Preference preference, Object o) { if(preference.getKey().equals("your_preference_key")) { ... } return false; }
-
Typecast Object o into String Object and use split(String) function in String class to get array of selected files.
@Override public boolean onPreferenceChange(Preference preference, Object o) { if(preference.getKey().equals("your_preference_key")) { String value=(String)o; String arr[]=value.split(":"); ... ... } return false; }
That's It. You are good to move further.
- defaultValue, error_dir, root_dir must have valid directory/file paths.
- defaultValue paths should end with ':'.
- defaultValue can have multiple paths, there should be a ':' between two paths.
- extensions must not have '.'.
- extensions should end with ':' , also have ':' between two extensions. eg. /sdcard:/mnt:
FilePickerPreference stores selected directories/files as a String. It delimits multiple files/directories using ':'char.
Read more on implementation here. Screenshot Theme.Black