Qu'est-ce que je fais mal ici? J'essaie d'appeler l'intention d'obtenir une image en taille réelle:Image Intent Zéro Longueur Image
takePictureIntent
private void takePictureIntent(int request) {
final Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
if (takePictureIntent.resolveActivity(activity.getPackageManager()) != null) {
File file = null;
try {
file = createImageFile(request);
} catch (Exception e) {
showErrorDialog(getString(R.string.error), getString(R.string.error_saving_picture));
Log.e(TAG, "Error while creating image file.");
}
if (file != null) {
takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(file));
startActivityForResult(takePictureIntent, request);
} else {
Log.e(TAG, "Error while creating image file.");
showErrorDialog(getString(R.string.error), getString(R.string.error_saving_picture));
}
}
}
createImageFile
private File createImageFile(final int request) {
final File storageDir = new File(activity.getExternalFilesDir(Environment.DIRECTORY_PICTURES), getString(R.string.app_name));
if (!storageDir.exists()) {
if (!storageDir.mkdirs()) {
Log.e(TAG, "Cannot create parent folders.");
return null;
}
}
File file = null;
try {
file = File.createTempFile("test_", ".jpg", storageDir);
} catch (Exception e) {
Log.e(TAG, "Error while creating temp file.");
}
fileProduct = file;
return file;
}
onActivityResult
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
if (resultCode == Activity.RESULT_OK && requestCode == REQUEST_IMAGE_PRODUCT) {
if (fileProduct == null ||!fileProduct.exists() ||fileProduct.length() == 0) {
showErrorDialog(getString(R.string.error), getString(R.string.error_taking_product_picture));
return;
}
}
Parfois (oui, parfois) la longueur du fichier résultant est 0. Je sais avec certitude que les dossiers dans le contexte de l'application privée existent et les fichiers d'image ainsi (avec une longueur> 0). Pourriez-vous s'il vous plaît fournir de l'aide? Je suis sur 6.0 sur Nexus 5X.
Ok pour 1 et 2, mais je ne m'attendrais pas à un tel bug sur une application appareil photo Nexus ... Ce code fonctionne très bien sur un Motorola Moto G 2014 avec Lollipop. J'appelle startActivityForResult à partir d'un fragment si cela peut être utile. Ce que je ne comprends pas, c'est que l'image est là, le système de fichiers l'a ... sanglot. – Jumpa
@Jumpa: Alors votre problème n'est pas un fichier de longueur nulle. Ma conjecture est que 'fileProduct' est' null', parce que votre processus a été terminé en arrière-plan. – CommonsWare
J'ai testé le fichier existe (je veux dire la méthode existe()) et n'est pas nul. – Jumpa