no se puede descodificar flujo de java.io.FileNotFoundException /almacenamiento/emulado/0 open failed:ENOENT(No existe el fichero o el directorio

hola estoy tratando de guardar las fotografías tomadas en mi aplicación, pero cuando intento acceder a la memoria para colocar los datos, un error que sale

incapaz de decodificar la secuencia de java.io.FileNotFoundException /almacenamiento/emulado/0 open failed:ENOENT(No existe el fichero o el directorio)

este es mi código.

            Camera.PictureCallback mPictureCallback = new Camera.PictureCallback() {

        public void onPictureTaken(byte[] data, Camera camera) {
            //TODO Auto-generated method stub
            if (data != null){
                //Intent mIntent = new Intent();
                //mIntent.putExtra("image",imageData);

                mCamera.stopPreview();
                mPreviewRunning = false;
                mCamera.release();

                 try{
                     BitmapFactory.Options opts = new BitmapFactory.Options();
                     Bitmap bitmap= BitmapFactory.decodeByteArray(data, 0, data.length,opts);
                     bitmap = Bitmap.createScaledBitmap(bitmap, 300, 300, false);
                     int width = bitmap.getWidth();
                     int height = bitmap.getHeight();
                     int newWidth = 300;
                     int newHeight = 300;

                     //calculate the scale - in this case = 0.4f
                     float scaleWidth = ((float) newWidth) / width;
                     float scaleHeight = ((float) newHeight) / height;

                     //createa matrix for the manipulation
                     Matrix matrix = new Matrix();
                     //resize the bit map
                     matrix.postScale(scaleWidth, scaleHeight);
                     //rotate the Bitmap
                     matrix.postRotate(-90);
                     Bitmap resizedBitmap = Bitmap.createBitmap(bitmap, 0, 0,
                             width, height, matrix, true);
                     Camera_local_db.image.setImageBitmap(resizedBitmap);

                 }catch(Exception e){
                     e.printStackTrace();
                 }
               //StoreByteImage(mContext, imageData, 50,"ImageName");
                //setResult(FOTO_MODE, mIntent);
                setResult(585);
                finish();
            }       
        }
    };


    Camera.PictureCallback jpegCallback = new Camera. PictureCallback() {
    @Override
    public void onPictureTaken(byte[] data, Camera camera) {


        File dir_image2 = new  File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM),"dddd.jpg");
        dir_image2.mkdirs();  //AGAIN CHOOSING FOLDER FOR THE PICTURE(WHICH IS LIKE A SURFACEVIEW 
                                //SCREENSHOT)
        if (!dir_image2.mkdirs()) {
            Log.e(TAG, "Directory not created");
        }


        File tmpFile = new File(dir_image2,"TempGhost.jpg"); //MAKING A FILE IN THE PATH                 
                        //dir_image2(SEE RIGHT ABOVE) AND NAMING IT "TempGhost.jpg" OR ANYTHING ELSE
        try {//SAVING
            FileOutputStream fos = new FileOutputStream(tmpFile);
            fos.write(data);
            fos.close();
            //grabImage();
        } catch (FileNotFoundException e) {
            Toast.makeText(getApplicationContext(),"Error",Toast.LENGTH_LONG).show();
        } catch (IOException e) {
            Toast.makeText(getApplicationContext(),"Error",Toast.LENGTH_LONG).show();
        }
        //String path = Environment.getExternalStoragePublicDirectory(    Environment.DIRECTORY_MOVIES); File file = new File(path, "/" + dir_image2);
        //String path = (Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM)+  
          //     File.separator+"TempGhost.jpg");//<---

        BitmapFactory.Options options = new BitmapFactory.Options();//<---
        options.inPreferredConfig = Bitmap.Config.ARGB_8888;//<---
        bmp1 = BitmapFactory.decodeFile(tmpFile.toString(), options);//<---
        //THE LINES ABOVE READ THE FILE WE SAVED BEFORE AND CONVERT IT INTO A BitMap
        Camera_local_db.image.setImageBitmap(bmp1);
        //camera_image.setImageBitmap(bmp1); //SETTING THE BitMap AS IMAGE IN AN IMAGEVIEW(SOMETHING
                                    //LIKE A BACKGROUNG FOR THE LAYOUT)
       //TakeScreenshot();//CALLING THIS METHOD TO TAKE A SCREENSHOT

    }
    };
InformationsquelleAutor Andonirock | 2014-08-23

5 Kommentare

  1. 8

    Usted necesita para escribir en almacenamiento externo, asegúrese de que usted agrega el permiso:

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

    Comprueba si de almacenamiento externo está disponible para leer y escribir:

    public boolean isExternalStorageWritable() {
        String state = Environment.getExternalStorageState();
        if (Environment.MEDIA_MOUNTED.equals(state)) {
            return true;
        }
        return false;
    }

    El uso de la raíz del directorio público en lugar de usar el root de Android.

    Si quieres guardar los archivos en el almacenamiento externo, utilice el getExternalStoragePublicDirectory()

    public File getAlbumStorageDir(String albumName) {
        //Get the directory for the user's public pictures directory. 
        File file = new File(Environment.getExternalStoragePublicDirectory(
                Environment.DIRECTORY_DCIM), albumName);
        if (!file.mkdirs()) {
            Log.e(LOG_TAG, "Directory not created");
        }
        return file;
    }

    Si desea guardar los archivos que son privadas para su aplicación, utilizar la getExternalFilesDir()

    public File getAlbumStorageDir(Context context, String albumName) {
        //Get the directory for the app's private pictures directory. 
        File file = new File(context.getExternalFilesDir(
                Environment.DIRECTORY_DCIM), albumName);
        if (!file.mkdirs()) {
            Log.e(LOG_TAG, "Directory not created");
        }
        return file;
    }

    Más información en el enlace http://developer.android.com/training/basics/data-storage/files.html

  2. 4

    Primero, se escribe la imagen en una ubicación diferente a lo que están leyendo es de. En lugar de reconstruir path, el uso de la tmpFile valor que usted ya tiene.

    Segundo, no utilice getRootDirectory() para obtener el DCIM directorio. Uso getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM).

    Tercero, el uso de Log métodos para registrar las excepciones, en lugar de solo mostrar un Toast, ya que puede perder el Toast y no obtener la traza de la pila asociada con su excepción.

  3. 4

    Tuve el mismo error, y el único problema era el permiso de manifiesto de android.

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

    He resuelto usando este:

    private static final int WRITE_PERMISSION = 0x01;
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        requestWritePermission();
    }
    
    @Override
    public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) {
        if(requestCode == WRITE_PERMISSION){
            if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                Log.d(LOG_TAG, "Write Permission Failed");
                Toast.makeText(this, "You must allow permission write external storage to your mobile device.", Toast.LENGTH_SHORT).show();
                finish();
            }
        }
    }
    
    private void requestWritePermission(){
        if(checkSelfPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE)!=PackageManager.PERMISSION_GRANTED){
            ActivityCompat.requestPermissions(this,new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},WRITE_PERMISSION);
        }
    }
  5. 0

    Agregar este permiso en el Manifiesto de Android.

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

    Si se produce un error con este permiso está presente ya, entonces usted necesita para comprobar su objetivo del app SDK de nivel. Si es targetSdkVersion => 23, entonces usted necesita para solicitar permisos en Tiempo de Ejecución.
    Aquí

Kommentieren Sie den Artikel

Bitte geben Sie Ihren Kommentar ein!
Bitte geben Sie hier Ihren Namen ein

Pruebas en línea