Android canvas save siempre java.io.IOException: abierto fallido: ENOENT (No hay tal archivo o directorio)

Tengo una aplicación de lona. Estoy intentando crear una aplicación de firma con Canvas + onTouchListener .

Este es mi método de guardar, donde intento guardar la firma en una imagen:

 private void save() { hideMenuBar(); View content = this; content.setDrawingCacheEnabled(true); content.setDrawingCacheQuality(View.DRAWING_CACHE_QUALITY_HIGH); Bitmap bitmap = content.getDrawingCache(); String path = Environment.getExternalStorageDirectory().getAbsolutePath(); String imgPath = path+"/imotax/capture/spop/ttd/image" + "temp" + ".jpg"; File file = new File(imgPath); FileOutputStream ostream; try { file.createNewFile(); ostream = new FileOutputStream(file); bitmap.compress(CompressFormat.JPEG, 100, ostream); ostream.flush(); ostream.close(); Toast.makeText(getContext(), "image saved", 5000).show(); } catch (Exception e) { e.printStackTrace(); Log.i("ttd", e.toString()); Toast.makeText(getContext(), "Failed To Save", 5000).show(); showMenuBar(); } } 

No sé por qué, pero siempre errores o entra en la declaración catch con este error:

 java.io.IOException: open failed: ENOENT (No such file or directory) 

Prueba de esta manera

 private void save() { try { hideMenuBar(); View content = this; content.setDrawingCacheEnabled(true); content.setDrawingCacheQuality(View.DRAWING_CACHE_QUALITY_HIGH); Bitmap bitmap = content.getDrawingCache(); String extr = Environment.getExternalStorageDirectory().toString(); File mFolder = new File(extr + "/imotax/capture/spop/ttd/image"); if (!mFolder.exists()) { mFolder.mkdir(); } String s = "tmp.png"; File f = new File(mFolder.getAbsolutePath(), s); FileOutputStream fos = null; fos = new FileOutputStream(f); bitmap.compress(CompressFormat.JPEG, 100, fos); fos.flush(); fos.close(); bitmap.recycle(); Toast.makeText(getContext(), "image saved", 5000).show(); } catch (Exception e) { Toast.makeText(getContext(), "Failed To Save", 5000).show(); } } 

ACTUALIZAR

 File mFolder = new File(extr + "/imotax/capture/spop/ttd/image"); //replace with File mFolder = new File(extr + "/imotax"); 
 Add this permissions in manifest. <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 

El promlem es que te pierdas un "/" entre sdcard y 0

 storage/sdcard0/imotax/capture/spop/ttd/image/tmp.png should be storage/sdcard/0/imotax/capture/spop/ttd/image/tmp.png 

No me preguntes por qué, pero esto parece ser un problema con los derechos de acceso. Trate de usar algún directorio público. Usando algo como:

 Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS) 
  • Android - Rellena el camino parcialmente
  • Canvas.drawBitmap () ignorando el modo de mosaico de la pintura
  • Coloque un rectángulo alrededor de una cadena en un lienzo de Android
  • Trabaje alrededor de Canvas.clipPath () que ya no es compatible con android
  • ¿Por qué dibujar bitmaps es muy lento en algunos teléfonos Android 2.2?
  • ¿Cómo hacer que cualquier vista dibuje a la lona?
  • ¿Cómo obtener el lienzo actual?
  • Cómo hacer un mapa de bits con la lona clicable?
  • Cómo encontrar los puntos girados de una forma en Android
  • Agregar un círculo de cuadro redondo en mapa de bits redondeado
  • Android - Canvas.clipRect () - Eliminar el clip existente
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.