2010-11-15 26 views
23

Salut J'utilise ACTION_IMAGE_CAPTURE pour capturer l'image en utilisant Intent comme suit:obtenir le chemin de l'image de ACTION_IMAGE_CAPTURE intention

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); 

Je dois stocker l'image dans un sdcard et 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 sait s'il vous plaît aider.

Merci

+2

s'il vous plaît mettre tout votre code dans le « code » textboxes, il rend la lecture de votre code beaucoup plus facile, de sorte que nous puissions être en mesure de répondre à vos questions – Samuel

Répondre

49

Voici comment cela fonctionne sur 2.2 (autre que sur les 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 l'image, dans onActivityResult() utilisation que 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 nouveaux appareils Android que vous auriez pas besoin MediaStore.EXTRA_OUTPUT, mais vous déduisez plutôt URI image/vidéo de data.getData() reçue de onActivityResult (..., les données d'intention), comme bien décrit sous

Android ACTION_IMAGE_CAPTURE Intent

Cependant, étant donné que cette partie est sujet à l'adaptation du fabricant, vous pouvez toujours rencontrer des téléphones où «ancienne» approche peut être utile.

+1

Merci pour cela, mais ne fonctionne pas sur Samsung Galaxy I ou II.Renvoie la vignette sur HTC Incredible :-( –

+0

Après avoir pris l'activité de la photo est rechargé et lors du démarrage de mon application, il affiche "Attente de débogage ...." Est-ce que tout ce que j'ai manqué.Vérifiez le code ici: http: // stackoverflow. com/questions/10510547/android-affichage-capturé-image-dans-img-tag – Ponmalar

+0

De onActivityResult() vous pouvez obtenir ce qui était le vrai nom sur la carte SD capturéImageFilePath l'a.Olive – Zelimir

7

Une autre façon, testé sur android 2.1, est de prendre l'ID ou AbsolutePath de la galerie dernière image.

Il peut être fait 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 a été basé sur le poste: Deleting a gallery image after camera intent photo taken

+0

merci pour votre aide! – michoprogrammer

2

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 intention ACTION_IMAGE_CAPTURE retournera toujours code=-1 et data=null sauf si vous définissez les autorisations suivantes pour l'application dans votre fichier AndroidManifest.xml:

<uses-permission android:name="android.permission.CAMERA"/> 

Vous pouvez également définir les paramètres suivants si vous voulez enregistrer l'audio de votre application:

<uses-permission android:name="android.permission.RECORD_AUDIO"/> 
+1

Après avoir renseigné la permission, il donne le code = -1 et data = null sur nexus 4 –

1

Retirer

intent.putExtra(MediaStore.EXTRA_OUTPUT, mCapturedImageURI); 

et ajouter

Uri uri = data.getData();in onActivityResult