android-filepicker

来源:互联网 发布:淘宝买苹果手机靠谱吗 编辑:程序博客网 时间:2024/06/11 03:02

android-filepicker

项目地址:Angads25/android-filepicker
简介:Selecting directories/files made easier.
Android Library to select files/directories from Device Storage.

Developed by

Angad Singh (@angads25)

Benchmark:

Where to Find:

Download Maven Central

Read all about internal classes and functions in the wiki.

Features

  • Easy to Implement.
  • No permissions required.
  • Files, Directory Selection.
  • Single or Multiple File selection.

Installation

  • 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   '

Usage

FilePickerDialog

  1. Start by creating an instance of DialogProperties.

         DialogProperties properties=new DialogProperties();

    Now 'DialogProperties' has certain parameters.

  2. 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;
  3. 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");
  4. 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`.

  5. Use dialog.show() method to show dialog.

NOTE:

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

  1. Start by declaring FilePickerPreference in your settings xml file as:

        <com.github.angads25.filepicker.view.FilePickerPreference        xmlns:app="http://schemas.android.com/apk/res-auto"        android:key="your_preference_key"        android:title="Pick a Directory"        android:summary="Just a Summary"        android:defaultValue="/sdcard:/mnt"        app:titleText="Select Directories"        app:error_dir="/mnt"        app:root_dir="/sdcard"        app:selection_mode="multi_mode"        app:selection_type="dir_select"        app:extensions="txt:pdf:"/>
  2. 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;     }
  3. 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.

Important:

  • defaultValueerror_dirroot_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:

Note:

FilePickerPreference stores selected directories/files as a String. It delimits multiple files/directories using ':'char.

Read more on implementation here.

Screenshot

Theme.Black

Screenshot 1

Theme.Holo

Screenshot 2

Theme.Holo.Light

Screenshot 3

Theme.Material

Screenshot 4

Theme.Device.Default

Screenshot 5

Performance

GPU Overdraw

Performance 1

GPU Rendering

Performance 2

0 0
原创粉丝点击