Search code examples
javaandroidmkdirandroid-10.0

Cant Create Folder in Android Q with mkdir


My app create folder in all android version without problem, except android Q , i don't know why my code not work in android q

Here is my code:

File dir = new File("/sdcard/test");
       try{
              if(dir.mkdir()) {
                      Log.d("DOWNLOAD","Directory created");
              } else {
                     Log.d("DOWNLOAD","Directory is not created");
              }
            }catch(Exception e){
                  e.printStackTrace();
        }

Solution

  • In Q, if you are wanting to access a file that is not a common music or media file, i.e. in your case sdcard/test then you need to do the below:

    In order to access any other file that another app has created, including files in a "downloads" directory, your app must use the Storage Access Framework, which allows the user to select a specific file.

    Quote src: http://developer.android.com/preview/privacy/scoped-storage

    // Here are some examples of how you might call this method.
    // The first parameter is the MIME type, and the second parameter is the name
    // of the file you are creating:
    //
    // createFile("text/plain", "foobar.txt");
    // createFile("image/png", "mypicture.png");
    
    // Unique request code.
    private const val WRITE_REQUEST_CODE: Int = 43
    ...
    private fun createFile(mimeType: String, fileName: String) {
        val intent = Intent(Intent.ACTION_CREATE_DOCUMENT).apply {
            // Filter to only show results that can be "opened", such as
            // a file (as opposed to a list of contacts or timezones).
            addCategory(Intent.CATEGORY_OPENABLE)
    
            // Create a file with the requested MIME type.
            type = mimeType
            putExtra(Intent.EXTRA_TITLE, fileName)
        }
    
        startActivityForResult(intent, WRITE_REQUEST_CODE)
    }
    

    Example src https://developer.android.com/guide/topics/providers/document-provider