27

I have just started coding in Android Studio and feeling Awesome..!!

How can I write a code for a 'Directory Picker'. i.e., When a button is clicked, a simple Dialog/Activity screen which can show list of directories.

Also, want to store all the files in that directory in to an Array variable. (Once OK button is clicked).

PS: I have searched here and found some cool 'File choose' but m looking for Directory Chooser..!

Thanks in advance.

hippietrail
  • 15,848
  • 18
  • 99
  • 158
Android_Noob
  • 487
  • 2
  • 6
  • 19

5 Answers5

42

Try to use Intent.ACTION_OPEN_DOCUMENT_TREE

if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.LOLLIPOP){ 
    Intent i = new Intent(Intent.ACTION_OPEN_DOCUMENT_TREE); 
    i.addCategory(Intent.CATEGORY_DEFAULT);
    startActivityForResult(Intent.createChooser(i, "Choose directory"), 9999);
}

And get the result Uri from onActivityResult data.getData()

@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
    super.onActivityResult(requestCode, resultCode, data);

    switch(requestCode) {
        case 9999:
            Log.i("Test", "Result URI " + data.getData());
            break;
    }
}
AurumTechie
  • 166
  • 3
  • 14
Milton
  • 529
  • 4
  • 4
5

Also you can use some libraries.
for example:
https://github.com/passy/Android-DirectoryChooser

Dima
  • 1,490
  • 16
  • 25
3

There's an open source library that does directory chooser and open/save file activities as well. It can be found on GitHub at https://github.com/BoardiesITSolutions/FileDirectoryPicker.

Works on Android API Level 17 and above

Disclaimer: I wrote it

Boardy
  • 35,417
  • 104
  • 256
  • 447
1

As of Android 10 (API 29), direct access to external storage is deprecated in favor of storage access framework https://developer.android.com/guide/topics/providers/document-provider

k4dima
  • 6,070
  • 5
  • 41
  • 39
-9

Use below code to select directory

        Intent result = new Intent();
        result.putExtra("chosenDir", path);
        setResult(RESULT_OK, result);

And to get the selected path override onActivityResult :

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if(requestCode == PICK_DIRECTORY && resultCode == RESULT_OK) {
        Bundle extras = data.getExtras();
        String path = (String) extras.get("chosenDir");

    }
}
Anjali
  • 1
  • 1
  • 13
  • 20