android mkdirs no funciona

necesito guardar una imagen de la cámara en android. He utilizado el permiso de escritura de almacenamiento externo en manifiesto y estoy utilizando este código

File dir = new File(Environment.getExternalStorageDirectory(), "Test"); if (!dir.exists() || !dir.isDirectory()) dir.mkdirs(); String path = dir.getAbsolutePath(); Log.d(TAG, path); //log show the path File file = new File(dir.getAbsolutePath() + "/Pic.jpg"); Log.d(TAG, file.getAbsolutePath()); //again path is shown here outStream = new FileOutputStream(file); outStream.write(bytes); outStream.close(); Log.d(TAG, "onPictureTaken - wrote bytes: " + bytes.length); //fail here } catch (FileNotFoundException e) { Log.d(TAG, "not done"); //error is here (this exception is thrown) } catch (IOException e) { Log.d(TAG, "not"); } finally { } 

También intenté mkdir () en vez de mkdirs () mismo resultado.

cualquier idea de lo que salió mal en el código?

Gracias

Para aquellos que no son tan experimentados como yo. Luché contra este asunto, perdí el cabello durante algún tiempo. Estoy apuntando api 21 (por razones de compatibilidad) y funcionó en lollipop pero en malvavisco no creará el directorio. Tenía el permiso de "usos" en el manifiesto pero todavía no funcionaría. Aparentemente en Marshmallow cuando instalas con Android Studio nunca te pregunta si debes darle permiso, simplemente falla silenciosamente, como si lo negas. Debe acceder a Configuración, aplicaciones, seleccionar su aplicación y activar el permiso.

Idiota he utilizado el permiso de manifiesto, pero cuando se instala la aplicación en el teléfono no dar permiso para el almacenamiento! … entiendo un negativo sobre esta cuestión … pero espero que si alguien más se enfrentan a la misma .. compruebe su permiso de teléfono. lo siento por molestias.

si está probando en android M, probablemente debería seleccionar Ajustes> Aplicación> Permiso para ver si se concede permiso para acceder al almacenamiento. Esto me salvó.

usted ha creado el directorio, no archivo. Crear un nuevo archivo con el siguiente código

 File file = new File(dir.getAbsolutePath() + "/Pic.jpg"); file.createNewFile() 

Prueba esto. Proporcionar permiso de tiempo de ejecución para malvavisco es perfectamente trabajo en mi código de aplicación:

  private String getFilename(String strFileName) { String filepath = Environment.getExternalStorageDirectory().getPath(); File fileBase = new File(filepath, "Test"); if (!fileBase.exists()) { fileBase.mkdirs(); } return (file.getAbsolutePath() + "/" + strFileName + file_exts[currentFormat]); } new File(getFilename(edt.getText().toString().trim())) 

Pusiste

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

en su AndroidManifest? Si está usando android M debe solicitar permiso de usuario para escribir en sd, mire aquí un ejemplo

FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.