Search code examples
javaandroidandroid-external-storagemkdirs

Can't create a folder in external storage, Android


I tried a lot to find a solution but everything has failed so far. It's probably something stupid.

I'm trying to save a photo as a jpeg in the storage of the phone. Everything fails even the simple task of making a folder. The code below is what I use to create the folder.

private void makeFolder(){
    try{
        File folder = new File(Environment.getExternalStorageDirectory().getAbsolutePath(),getString(R.string.app_name));
        boolean success = true;
        if (!folder.exists()) {
            success = folder.mkdirs();
        }
        if (success) {
            Toast.makeText(this,"Done",Toast.LENGTH_SHORT).show();
        } else {
            Toast.makeText(this,"folder_failed",Toast.LENGTH_SHORT).show();
            System.out.println(folder.getAbsolutePath());
        }
    }catch (Exception e){
        Toast.makeText(this,"exception",Toast.LENGTH_SHORT).show();
        e.printStackTrace();
    }
}

I have tried many different ways like:

        File folder = new File(Environment.getExternalStorageDirectory().getAbsolutePath() +
                File.separator + getString(R.string.app_name)+File.separator);

        File folder = new File(Environment.getExternalStorageDirectory().getAbsolutePath() +
                File.separator + getString(R.string.app_name);
        
        File folder = new File(Environment.getExternalStorageDirectory().getAbsolutePath()
                ,getString(R.string.app_name));

I have tried both mkdirs and mkdir and

-Environment.getExternalStorageDirectory().getAbsolutePath()
-getExternalStorageDirectory().getAbsolutePath()
-Environment.getExternalStorageDirectory()
-getExternalStorageDirectory()

The permission exists in the manifest and is accepted.

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

The path the the System.out prints is "/storage/emulated/0/appname"

I don't know what else to try. Similar code works for other applications. Min API is 23. Any help is much appreciated.


Solution

  • I suggest you to try Context.getExternalFilesDir() instead of Environment.getExternalStorageDirectory()