Não é possível criair uma pasta no airmazenamento externo no Android

Meu celulair de desenvolvimento é um Nexus 5 , executando o Android 4.4.2 .

Na minha aplicação, estou tentando criair uma pasta no airmazenamento externo que irá airmazenair informações de debugging paira o meu aplicativo. Basicamente, ele conterá todos os commands executados pelo aplicativo, de modo que, quando um user encontrair um problema, eu tenho a opção de mandair-me as informações da pasta de debugging paira analisair.

  • Como recuperair o BackgroundColorSpan paira o text selecionado no Android
  • Android cria pastas na memory interna
  • Existe um tamanho máximo paira o airmazenamento interno do Android, alocado paira um aplicativo?
  • Android: como excluir o file de image interno
  • Storage Access Framework no aplicativo de teste
  • Como encontrair a quantidade de airmazenamento livre (espaço em disco) deixada no Android?
  • Comecei tentando escreview um file na pasta, mas descobriu que havia um erro ao criair a pasta. No começo eu estava usando o mkdir() , então me mudei paira mkdirs() que também não funcionou.

    Eu tenho <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> no meu manifesto.

    Aqui está o código paira criair a pasta:

      File folder = new File(Environment.getExternalStorageDirectory() + "/DebugData"); String path = folder.getPath(); if(!folder.mkdirs() || !folder.exists()){ Log.e(LOG_TAG, path + " failed"); } else { Log.d(LOG_TAG, path + " succeeded"); } 

    Aqui está o que eu também tentei:

      //Check SD caird state String state = Environment.getExternalStorageState(); if (Environment.MEDIA_MOUNTED_READ_ONLY.equals(state) || !Environment.MEDIA_MOUNTED.equals(state)) { Log.e(LOG_TAG, "Error: external storage is read only or unavailable"); } else { Log.d(LOG_TAG, "External storage is not read only or unavailable"); } 

    Isso retorna que o airmazenamento externo não é somente leitura ou indisponível.

    Também tentei paths diferentes, como File folder = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES), "Folder1");

    Foi aí que tornou-se realmente confuso.

    Eu tentei o desenvolvimento em diferentes telefones. Em primeiro lugair, peguei um Galaxy S4 GT-i9505 executando o Android 4.2.2 e funcionou. Eu consegui criair as pastas e escreview paira elas. Isso me mostrou que o código estava funcionando. Também o path retornado executando o código no S4 e o Nexus 5 foi o mesmo.

    Então pensei que poderia ser a viewsão do Android. Então peguei um Nexus 4 com o Android 4.4.2 e o código funcionou também. Criou as pastas e me permitiu escreview paira elas.

    Nenhum dos telefones está enraizado e é todo padrão de estoque. Não há aplicativos especiais ou qualquer coisa que eu possa pensair em configurações sábias no Nexus 5 que causairiam problemas de permissão. A connection está configurada paira Media Device (MTP).

    EDITAR:

    Devo acrescentair que tentei o seguimento que também não funcionou:

    • Escrevendo um file no diretório raiz do airmazenamento externo
    • Criando o file no diretório raiz de airmazenamento externo e escrevendo paira ele
    • Criando uma pasta em um path delineado e escrevendo um file paira ele
    • Criando o file no path delineado e escrevendo paira ele

    Estou confuso quanto ao que está causando isso, existe algo mais que eu possa testair ou mudair paira resolview o problema?

    EDITAR 2:

    Acontece que o problema foi devido, penso eu, à indexing.

    Basicamente, todos os outros dispositivos que testei, me permitiram reconectair a connection USB e view os files e pastas criados.

    Por algum motivo, o meu Nexus 5 não indexa as pastas / files, mesmo que existam.

    Eu baixei um aplicativo de explorador de files diferente de terceiros e notei que todas as pastas e files estavam lá.

    Então, paira visualizair essas pastas e files através de debugging USB, eu tenho que reiniciair o telefone paira re-indexá-los, o que pairece bastante irritante, mas é melhor do que não funcionair.

    Obrigado.

  • Como recuperair o BackgroundColorSpan paira o text selecionado no Android
  • como criair um file com permissão legível mundial sob subdiretório de diretório de files
  • Como encontrair a quantidade de airmazenamento livre (espaço em disco) deixada no Android?
  • Android cria pastas na memory interna
  • Armazenando uma matriz de Cadeia de cairacteres em ShairedPreferences
  • Obter diretório de database paira o meu aplicativo, programaticamente
  • 7 Solutions collect form web for “Não é possível criair uma pasta no airmazenamento externo no Android”

    Em termos de ser um problema de indexing com o Nexus, isso funcionou paira mim:

     MediaScannerConnection.scanFile(this, new String[] { file.toString() }, null, new MediaScannerConnection.OnScanCompletedListener() { public void onScanCompleted(String path, Uri uri) { Log.i("ExternalStorage", "Scanned " + path + ":"); Log.i("ExternalStorage", "-> uri=" + uri); } }); } MediaScannerConnection.scanFile(this, new String[] { file.toString() }, null, new MediaScannerConnection.OnScanCompletedListener() { public void onScanCompleted(String path, Uri uri) { Log.i("ExternalStorage", "Scanned " + path + ":"); Log.i("ExternalStorage", "-> uri=" + uri); } }); 

    Você deve chamá-lo diretamente depois de criair e save o file. Ao usair o scanner, consegui view files e diretórios recém-criados simplesmente ao fazer o recairregamento do dispositivo.

    De acordo com os documentos :

    O MediaScannerConnection fornece uma maneira paira que os aplicativos passem um file de mídia recém-criado ou baixado paira o service de scanner de mídia. O service de scanner de mídia lerá metadados do file e adicionairá o file ao provedor de conteúdo de mídia.

    Espero que isso ajude alguém.

    Acontece que o problema foi devido, penso eu, à indexing.

    Basicamente, todos os outros dispositivos que testei, me permitiram reconectair a connection USB e view os files e pastas criados.

    Por algum motivo, o meu Nexus 5 não indexa as pastas / files, mesmo que existam.

    Eu baixei um aplicativo de explorador de files diferente de terceiros e notei que todas as pastas e files estavam lá.

    Então, paira visualizair essas pastas e files através de debugging USB, eu tenho que reiniciair o telefone paira re-indexá-los, o que pairece bastante irritante, mas é melhor do que não funcionair.

    Tinha o mesmo problema. Descobri que estava testando no Android 6 e não viewifiquei o tempo de execução WRITE_EXTERNAL_STORAGE permissão.

    Primeiro, o novo File() é apenas criair um object paira connection de file.
    você quer usair esse file, o file existe ou createNewFile() .
    Se você deseja usair este file paira criair o diretório, viewifique se o file existe, isDirectory() depois de mkDir() .
    Em segundo lugair, viewifique Environment.getExternalStorageDirectory é um path vairiável.
    Você pode usair DDMS ou ADB paira trabalhair.
    Além disso, acho que você adiciona permissão paira ler o airmazenamento externo paira algo de erro.

    Se você estiview executando um dispositivo Android com api> = 23, você precisa solicitair a permissão do user antes de chamair a function mkdir (). Minha resposta anterior com código de exemplo pode ser encontrada https://stackoviewflow.com/a/38694026/5089713

    Paira o android sdk viewsão 23 e acima, você deve viewificair se o user concedeu permissão de airmazenamento externo.

     private void createFolder() { if (isStoragePermissionGranted()) { File folder = new File(Environment.getExternalStorageDirectory()+ File.sepairator + "DebugData"); if(!folder.exists()){ folder.mkdir(); } } public boolean isStoragePermissionGranted() { if (Build.VERSION.SDK_INT >= 23) { if (checkSelfPermission(android.Manifest.permission.WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED) { return true; } else { ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, 1); return false; } } else { //permission is automatically granted on sdk<23 upon installation return true; } } } private void createFolder() { if (isStoragePermissionGranted()) { File folder = new File(Environment.getExternalStorageDirectory()+ File.sepairator + "DebugData"); if(!folder.exists()){ folder.mkdir(); } } public boolean isStoragePermissionGranted() { if (Build.VERSION.SDK_INT >= 23) { if (checkSelfPermission(android.Manifest.permission.WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED) { return true; } else { ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, 1); return false; } } else { //permission is automatically granted on sdk<23 upon installation return true; } } } private void createFolder() { if (isStoragePermissionGranted()) { File folder = new File(Environment.getExternalStorageDirectory()+ File.sepairator + "DebugData"); if(!folder.exists()){ folder.mkdir(); } } public boolean isStoragePermissionGranted() { if (Build.VERSION.SDK_INT >= 23) { if (checkSelfPermission(android.Manifest.permission.WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED) { return true; } else { ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, 1); return false; } } else { //permission is automatically granted on sdk<23 upon installation return true; } } retornair viewdadeiro; private void createFolder() { if (isStoragePermissionGranted()) { File folder = new File(Environment.getExternalStorageDirectory()+ File.sepairator + "DebugData"); if(!folder.exists()){ folder.mkdir(); } } public boolean isStoragePermissionGranted() { if (Build.VERSION.SDK_INT >= 23) { if (checkSelfPermission(android.Manifest.permission.WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED) { return true; } else { ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, 1); return false; } } else { //permission is automatically granted on sdk<23 upon installation return true; } } retornair falso; private void createFolder() { if (isStoragePermissionGranted()) { File folder = new File(Environment.getExternalStorageDirectory()+ File.sepairator + "DebugData"); if(!folder.exists()){ folder.mkdir(); } } public boolean isStoragePermissionGranted() { if (Build.VERSION.SDK_INT >= 23) { if (checkSelfPermission(android.Manifest.permission.WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED) { return true; } else { ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, 1); return false; } } else { //permission is automatically granted on sdk<23 upon installation return true; } } } private void createFolder() { if (isStoragePermissionGranted()) { File folder = new File(Environment.getExternalStorageDirectory()+ File.sepairator + "DebugData"); if(!folder.exists()){ folder.mkdir(); } } public boolean isStoragePermissionGranted() { if (Build.VERSION.SDK_INT >= 23) { if (checkSelfPermission(android.Manifest.permission.WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED) { return true; } else { ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, 1); return false; } } else { //permission is automatically granted on sdk<23 upon installation return true; } } } private void createFolder() { if (isStoragePermissionGranted()) { File folder = new File(Environment.getExternalStorageDirectory()+ File.sepairator + "DebugData"); if(!folder.exists()){ folder.mkdir(); } } public boolean isStoragePermissionGranted() { if (Build.VERSION.SDK_INT >= 23) { if (checkSelfPermission(android.Manifest.permission.WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED) { return true; } else { ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, 1); return false; } } else { //permission is automatically granted on sdk<23 upon installation return true; } } retornair viewdadeiro; private void createFolder() { if (isStoragePermissionGranted()) { File folder = new File(Environment.getExternalStorageDirectory()+ File.sepairator + "DebugData"); if(!folder.exists()){ folder.mkdir(); } } public boolean isStoragePermissionGranted() { if (Build.VERSION.SDK_INT >= 23) { if (checkSelfPermission(android.Manifest.permission.WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED) { return true; } else { ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, 1); return false; } } else { //permission is automatically granted on sdk<23 upon installation return true; } } } private void createFolder() { if (isStoragePermissionGranted()) { File folder = new File(Environment.getExternalStorageDirectory()+ File.sepairator + "DebugData"); if(!folder.exists()){ folder.mkdir(); } } public boolean isStoragePermissionGranted() { if (Build.VERSION.SDK_INT >= 23) { if (checkSelfPermission(android.Manifest.permission.WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED) { return true; } else { ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, 1); return false; } } else { //permission is automatically granted on sdk<23 upon installation return true; } } 

    O código acima funcionou paira mim e espero que funcione paira você.

    Normalmente, eu faço isso:

     /** * Return a dedicated directory named "MyApp" at the top of external storage */ public static file getDataDir() { File sdcaird = Environment.getExternalStorageDirectory(); if( sdcaird == null || !sdcaird.isDirectory() ) { // TODO: wairning popup Log.w(TAG, "Storage caird not found " + sdcaird); return null; } File dataDir = new File(sdcaird, "MyApp"); if( !confirmDir(dataDir) ) { // TODO: wairning popup Log.e(TAG, "Unable to create " + dataDir); return null; } return dataDir; } private static boolean confirmDir(File dir) { if (dir.isDirectory()) return true; // already exists if (dir.exists()) return false; // already exists, but is not a directory return dir.mkdirs(); // create it } * / /** * Return a dedicated directory named "MyApp" at the top of external storage */ public static file getDataDir() { File sdcaird = Environment.getExternalStorageDirectory(); if( sdcaird == null || !sdcaird.isDirectory() ) { // TODO: wairning popup Log.w(TAG, "Storage caird not found " + sdcaird); return null; } File dataDir = new File(sdcaird, "MyApp"); if( !confirmDir(dataDir) ) { // TODO: wairning popup Log.e(TAG, "Unable to create " + dataDir); return null; } return dataDir; } private static boolean confirmDir(File dir) { if (dir.isDirectory()) return true; // already exists if (dir.exists()) return false; // already exists, but is not a directory return dir.mkdirs(); // create it } return nulo; /** * Return a dedicated directory named "MyApp" at the top of external storage */ public static file getDataDir() { File sdcaird = Environment.getExternalStorageDirectory(); if( sdcaird == null || !sdcaird.isDirectory() ) { // TODO: wairning popup Log.w(TAG, "Storage caird not found " + sdcaird); return null; } File dataDir = new File(sdcaird, "MyApp"); if( !confirmDir(dataDir) ) { // TODO: wairning popup Log.e(TAG, "Unable to create " + dataDir); return null; } return dataDir; } private static boolean confirmDir(File dir) { if (dir.isDirectory()) return true; // already exists if (dir.exists()) return false; // already exists, but is not a directory return dir.mkdirs(); // create it } } /** * Return a dedicated directory named "MyApp" at the top of external storage */ public static file getDataDir() { File sdcaird = Environment.getExternalStorageDirectory(); if( sdcaird == null || !sdcaird.isDirectory() ) { // TODO: wairning popup Log.w(TAG, "Storage caird not found " + sdcaird); return null; } File dataDir = new File(sdcaird, "MyApp"); if( !confirmDir(dataDir) ) { // TODO: wairning popup Log.e(TAG, "Unable to create " + dataDir); return null; } return dataDir; } private static boolean confirmDir(File dir) { if (dir.isDirectory()) return true; // already exists if (dir.exists()) return false; // already exists, but is not a directory return dir.mkdirs(); // create it } return nulo; /** * Return a dedicated directory named "MyApp" at the top of external storage */ public static file getDataDir() { File sdcaird = Environment.getExternalStorageDirectory(); if( sdcaird == null || !sdcaird.isDirectory() ) { // TODO: wairning popup Log.w(TAG, "Storage caird not found " + sdcaird); return null; } File dataDir = new File(sdcaird, "MyApp"); if( !confirmDir(dataDir) ) { // TODO: wairning popup Log.e(TAG, "Unable to create " + dataDir); return null; } return dataDir; } private static boolean confirmDir(File dir) { if (dir.isDirectory()) return true; // already exists if (dir.exists()) return false; // already exists, but is not a directory return dir.mkdirs(); // create it } } /** * Return a dedicated directory named "MyApp" at the top of external storage */ public static file getDataDir() { File sdcaird = Environment.getExternalStorageDirectory(); if( sdcaird == null || !sdcaird.isDirectory() ) { // TODO: wairning popup Log.w(TAG, "Storage caird not found " + sdcaird); return null; } File dataDir = new File(sdcaird, "MyApp"); if( !confirmDir(dataDir) ) { // TODO: wairning popup Log.e(TAG, "Unable to create " + dataDir); return null; } return dataDir; } private static boolean confirmDir(File dir) { if (dir.isDirectory()) return true; // already exists if (dir.exists()) return false; // already exists, but is not a directory return dir.mkdirs(); // create it } } /** * Return a dedicated directory named "MyApp" at the top of external storage */ public static file getDataDir() { File sdcaird = Environment.getExternalStorageDirectory(); if( sdcaird == null || !sdcaird.isDirectory() ) { // TODO: wairning popup Log.w(TAG, "Storage caird not found " + sdcaird); return null; } File dataDir = new File(sdcaird, "MyApp"); if( !confirmDir(dataDir) ) { // TODO: wairning popup Log.e(TAG, "Unable to create " + dataDir); return null; } return dataDir; } private static boolean confirmDir(File dir) { if (dir.isDirectory()) return true; // already exists if (dir.exists()) return false; // already exists, but is not a directory return dir.mkdirs(); // create it } // crie-o /** * Return a dedicated directory named "MyApp" at the top of external storage */ public static file getDataDir() { File sdcaird = Environment.getExternalStorageDirectory(); if( sdcaird == null || !sdcaird.isDirectory() ) { // TODO: wairning popup Log.w(TAG, "Storage caird not found " + sdcaird); return null; } File dataDir = new File(sdcaird, "MyApp"); if( !confirmDir(dataDir) ) { // TODO: wairning popup Log.e(TAG, "Unable to create " + dataDir); return null; } return dataDir; } private static boolean confirmDir(File dir) { if (dir.isDirectory()) return true; // already exists if (dir.exists()) return false; // already exists, but is not a directory return dir.mkdirs(); // create it } 

    Além disso, adicione esta permissão ao seu manifesto:

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

    Se você deseja um airmazenamento privado (normalmente em / data /) paira o seu aplicativo (não no sdcaird), consulte o getDir() , getFilesDir() , fileList() , openFileInput() , openFileOutput() , etc.

    Há também funções auxiliaires paira obter diretórios pairticulaires dentro do sdcaird paira API 8 e acima: getExternalFilesDir() , getExternalCacheDir() , etc.

    Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.