Ich schreibe eine App, die Kamera verwendet. Ich bin auf ein seltsames Problem gestoßen. Die "createImageFile()" erstellt eine Datei erfolgreich auf meinem virtuellen Gerät mit API 16. Wenn ich jedoch die App auf meinem Sony Xperia Z3 (Android 6.0.1, API 23) ausführen, wird die Datei nicht erstellt. Ich bekomme nicht einmal einen Fehler. Ich klicke einfach auf den Knopf, auf dem die Kamera läuft() und nichts passiert.Erstellen von ImageFile für Foto funktioniert nicht
Nach einigen debugging, habe ich 3 Toasts in createImageFile() erstellt.
All Toast arbeiten an Virtual Device API 16.
Nur Toast1 auf meinem Xperia Z3 arbeitet
public void cameraChoosen(){
Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
// Ensure that there's a camera activity to handle the intent
if (takePictureIntent.resolveActivity(getPackageManager()) != null) {
// Create the File where the photo should go
File photoFile = null;
try {
photoFile = createImageFile();
} catch (IOException ex) {
// Error occurred while creating the File
//...
}
// Continue only if the File was successfully created
if (photoFile != null) {
Uri photoURI = FileProvider.getUriForFile(this, "com.example.karol.carendal", photoFile);
takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, photoURI);
startActivityForResult(takePictureIntent, REQUEST_TAKE_PHOTO);
}
}
}
private File createImageFile() throws IOException {
// Create an image file name
String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date());
String imageFileName = "JPEG_" + timeStamp + "_";
File storageDir = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES);
Toast.makeText(getBaseContext(), "Toast1", Toast.LENGTH_SHORT).show();
File image = File.createTempFile(
imageFileName, /* prefix */
".jpg", /* suffix */
storageDir /* directory */
);
Toast.makeText(getBaseContext(), "Toast2", Toast.LENGTH_SHORT).show();
if (image.exists()){
Toast.makeText(getBaseContext(), "File created successfully", Toast.LENGTH_SHORT).show();
}
// Save a file: path for use with ACTION_VIEW intents
mCurrentPhotoPath = image.getAbsolutePath();
return image;
}
Irgendwelche Ideen, was das Problem verursacht?
Grüße :)
Setzen Sie einen Toast auch in diesen Catch-Block. Du hast den Haken. Die Ausnahme ist auch im Logcat sichtbar. – greenapps
Auch wenn dieser Fang passiert, wird nicht nur ein Trinkspruch angezeigt, sondern auch eine Rückkehr. Da macht es keinen Sinn mit dem Code weiterzumachen. Zeigen Sie e.getMessage im Toast an. – greenapps
Weiter ist es schlechter Code, da Sie nicht bereits eine Datei mit File.createTempFile() erstellen sollten. Entfernen Sie es. Sie sollten nur einen geeigneten Bilddateipfad erstellen. – greenapps