Salut, j'utilise ACTION_IMAGE_CAPTURE
pour capturer l'image à l'aide de Intent
comme suit:
Intent cameraIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
cameraIntent.putExtra(
MediaStore.EXTRA_OUTPUT, (new File(Environment.getExternalStorageDirectory(),
String.valueOf(System.currentTimeMillis()) + ".jpg"))
);
startActivityForResult(cameraIntent, 0);
J'ai besoin de stocker l'image dans une carte SD et de récupérer le chemin de cette image en utilisant la méthode onActivityResult
. Je ne sais pas comment obtenir le chemin de l'image de l'image actuellement capturée.
Si quelqu'un le sait, aidez-moi.
Merci
C'est ainsi que cela fonctionne sur 2.2 (différent des versions précédentes). Au début de l'intention
String fileName = "temp.jpg";
ContentValues values = new ContentValues();
values.put(MediaStore.Images.Media.TITLE, fileName);
mCapturedImageURI = getContentResolver().insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values);
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
intent.putExtra(MediaStore.EXTRA_OUTPUT, mCapturedImageURI);
startActivityForResult(intent, CAPTURE_PICTURE_INTENT);
vous devez vous rappeler mCapturedImageURI
.
Lorsque vous capturez une image, dans onActivityResult()
utilisez cet URI pour obtenir le chemin du fichier:
String[] projection = { MediaStore.Images.Media.DATA};
Cursor cursor = managedQuery(mCapturedImageURI, projection, null, null, null);
int column_index_data = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
cursor.moveToFirst();
String capturedImageFilePath = cursor.getString(column_index_data);
MISE À JOUR: Sur les nouveaux appareils Android Android, vous n'auriez pas besoin de MediaStore.EXTRA_OUTPUT, mais vous déduisez plutôt l'URI image/vidéo de data.getData () reçu de onActivityResult (..., Intent data), comme décrit joliment sous
Intention Android ACTION_IMAGE_CAPTURE
Cependant, puisque cette partie est sujette à l'adaptation du fabricant, vous pouvez toujours rencontrer des téléphones où une "ancienne" approche peut être utile.
Une autre façon, testée sur Android 2.1, est de prendre l'ID ou AbsolutePath de la dernière image de la galerie.
Cela peut se faire comme ça:
/**
* Gets the last image id from the media store
* @return
*/
private int getLastImageId(){
final String[] imageColumns = { MediaStore.Images.Media._ID, MediaStore.Images.Media.DATA };
final String imageOrderBy = MediaStore.Images.Media._ID+" DESC";
Cursor imageCursor = managedQuery(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, imageColumns, null, null, imageOrderBy);
if(imageCursor.moveToFirst()){
int id = imageCursor.getInt(imageCursor.getColumnIndex(MediaStore.Images.Media._ID));
String fullPath = imageCursor.getString(imageCursor.getColumnIndex(MediaStore.Images.Media.DATA));
Log.d(TAG, "getLastImageId::id " + id);
Log.d(TAG, "getLastImageId::path " + fullPath);
imageCursor.close();
return id;
}else{
return 0;
}
}
Et pour supprimer le fichier:
private void removeImage(int id) {
ContentResolver cr = getContentResolver();
cr.delete(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, MediaStore.Images.Media._ID + "=?", new String[]{ Long.toString(id) } );
}
Ce code était basé sur le post: Suppression d'une image de galerie après la prise de vue de l'objectif de la caméra
Retirer
intent.putExtra(MediaStore.EXTRA_OUTPUT, mCapturedImageURI);
et ajouter
Uri uri = data.getData();in onActivityResult
Cette question est très ancienne mais je me bats avec le même problème depuis une demi-journée. Le problème est que votre ACTION_IMAGE_CAPTURE
l'intention renverra toujours code=-1
et data=null
sauf si vous définissez les autorisations suivantes pour l'application dans votre AndroidManifest.xml
fichier:
<uses-permission Android:name="Android.permission.CAMERA"/>
Vous pouvez également définir les paramètres suivants si vous souhaitez enregistrer de l'audio à partir de votre application:
<uses-permission Android:name="Android.permission.RECORD_AUDIO"/>