decodieren stream java.io.FileNotFoundException " /storage/emulated/0 open failed:ENOENT(No such file or directory
Hallo, ich bin versucht zu retten, Bilder von meiner Anwendung, aber wenn ich versuche, Zugriff auf den Speicher, um die Daten, ein Fehler kommt
decodieren stream java.io.FileNotFoundException " /storage/emulated/0 open failed:ENOENT(No such file or directory)
dies ist mein code.
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
Du musst angemeldet sein, um einen Kommentar abzugeben.
Müssen Sie schreiben Sie external storage, stellen Sie sicher, dass Sie die Erlaubnis:
Überprüft, ob externe Speicher verfügbar, für Lesen und schreiben:
Verwenden Sie die Wurzel das öffentliche Verzeichnis statt mit der root von Android.
Wenn Sie speichern möchten, die öffentlichen Dateien auf dem externen Speicher, verwenden Sie die getExternalStoragePublicDirectory()
Wenn Sie wollen, um Dateien zu speichern, die privat sind, um Ihre app, verwenden Sie die getExternalFilesDir()
Mehr Informationen auf den link http://developer.android.com/training/basics/data-storage/files.html
InformationsquelleAutor Jairo Correa
Ich hatte den gleichen Fehler, und das einzige problem war die Berechtigung im android-manifest.
InformationsquelleAutor Calixto
Erste, Sie schreiben das Bild an einem anderen Speicherort als Sie es Lesen. Anstatt wieder aufzubauen
path
verwenden Sie dietmpFile
Wert, den Sie bereits haben.Zweitens, verwenden Sie nicht
getRootDirectory()
um dieDCIM
- Verzeichnis. VerwendengetExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM)
.Dritte, verwenden Sie
Log
Methoden zur Protokollierung von Ausnahmen abgesehen, eher als nur die Anzeige einerToast
, wie können Sie verpassen dieToast
und Sie nicht bekommen, die stack-trace im Zusammenhang mit Ihrer Ausnahme.InformationsquelleAutor CommonsWare
Ich gelöst mit:
InformationsquelleAutor JackTurky
Hinzufügen diese Berechtigung im Android-Manifest.
Wenn es nicht gelingt, mit dieser ist die Berechtigung vorhanden, dann müssen Sie überprüfen Ihre app-target-SDK-Ebene. Wenn es targetSdkVersion => 23, dann müssen Sie beantragen Berechtigungen zur Laufzeit.
Hier
InformationsquelleAutor Annada