Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to create new folder in sd card by using Storage Access Framework?

I would like to know how to use "Storage Access Framework" to create new folder on SD card. If you give me the code it would be very good. I have already searched other questions and answers but not found how to.

Add some codes that already work per "CommonsWare" answer. Note that is the only way I found that it can make new folder in sd card on my phone SS A5 with Android OS 5.1.1

    public void newFolder(View view)
    {
        Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT_TREE);
        startActivityForResult(intent, NEW_FOLDER_REQUEST_CODE);
    }

    private static final int NEW_FOLDER_REQUEST_CODE = 43;

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

        Uri currentUri = null;

        if (resultCode == Activity.RESULT_OK)
        {
            if (requestCode == NEW_FOLDER_REQUEST_CODE)
            {
                if (resultData != null) {
                    currentUri = resultData.getData();
                    DocumentFile pickedDir = DocumentFile.fromTreeUri(this, currentUri);
                    DocumentFile newDir = pickedDir.createDirectory("MyFolder");
                    textView.setText(newDir.getName());
                }
            }
        }
    }
like image 670

1 Answers

You cannot create "create new folder on SD card". You can create a new folder inside some other folder that the user chooses, but you cannot force the user to choose removable storage.

To create a new folder inside of some other folder, this should work:

  1. Start an activity with startActivityForResult() on an ACTION_OPEN_DOCUMENT_TREE Intent, to allow the user to choose a folder. Include FLAG_DIR_SUPPORTS_CREATE to ensure that you can create something new in the folder.

  2. In onActivityResult(), wrap the Uri that you get in a DocumentFile, then call createDirectory() on it to create a new folder as a child of whatever the user chose.

like image 128
CommonsWare Avatar answered Feb 15 '23 10:02

CommonsWare