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:
- Método de dibujo de Android que se ejecuta lento
- Android: cómo crear un botón sobre Bitmap dinámicamente o botón OVERLAYING?
- Inclinar una vista de texto en Android
- Dibujo de una cabeza de flecha en android
- Cómo ampliar / ampliar la parte de la 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)
- Android - Desvanece imagen de mapa de bits en lienzo
- Borrar la pintura del lienzo sin borrar la imagen de fondo - Android
- Canvas: acercar, cambiar y escalar en Android
- Android: ¿Cómo comprobar si una ruta de acceso contiene punto de contacto?
- SurfaceHolder.setFormat (PixelFormat.RGBA_8888) falla en algunos dispositivos y no en otros
- Android - Cómo superponer un camino encima de otro
- ¿Cómo encajan las piezas de la tubería de dibujo de Canvas de Android (2D)?
- Dibujar lienzo en el widget de pantalla de inicio
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)