Eine Datei wird von der Kamera erfasst. Wir verwenden nicht Intent
, aber speichern Sie eine Datei in tempfile
Objekt. Dies ist der CodeWas könnte Dateipfad NULL nur auf Galaxy S4 5.0.1 verursachen?
private static final int IMAGE_CAPTURE = 1002; //class-wide
private String mCurrentPhotoPath; //class-wide
//...
File photoFile = createImageFile();
Uri uri = Uri.fromFile(photoFile);
intent.putExtra(MediaStore.EXTRA_OUTPUT, uri);
startActivityForResult(intent, IMAGE_CAPTURE);
//...
private File createImageFile() throws IOException {
imageName = mCodeContent + "_" + Integer.toString(randomNumber) + ".png";
File storageDir = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES);
File image = File.createTempFile(imageName, ".png", storageDir);
mCurrentPhotoPath = image.getAbsoluteFile().getPath();
mImageNameList.add(imageName);
return image;
}
Aber dieser Moment, eine Variable mCurrentPhotoPath
kein Null ist.
Nachdem jedoch ein Benutzer ein Bild nimmt, wird die Variable mCurrentPhotoPath
NULL in der onActivityResult
so ist dies ein Absturz schafft
case IMAGE_CAPTURE:
try {
Uri uri = Uri.fromFile(new File(mCurrentPhotoPath)); //<---CRASH!!!
handleCameraImage(uri);
} catch (Exception e) {
Toast.makeText(this, "ERROR (IMAGE_CAPTURE)" + "\nmCurrentPhotoPath=" +
mCurrentPhotoPath + "\n Log: " + e.getMessage(), Toast.LENGTH_LONG).show();
}
break;
Der Bildpfad auf S4 wie /storage/emulated/0/pictures/imageName.png
aussieht.
Was verursacht oder löscht mCurrentPhotoPath
? Und nur auf S4, nicht auf anderen Geräten.
PS. Ich habe versucht, diesen Wert in den gemeinsamen Einstellungen zu speichern, aber irgendwann werden sie auch gelöscht.
Ihre Aktivität hinter der Kamera und geschlossen. Es wird neu erstellt, wenn die Kamera verschwindet. Sie sollten onSaveInstanceState() verwenden, um den Wert zu speichern. Holen Sie es in onCreate vom savedInstanceState-Parameter zurück. – greenapps
Gemeinsame Vorräte sollten immer funktionieren. – greenapps